diff --git a/docs/api/getting-started.pug b/docs/api/getting-started.pug
index f565745232..e255a5e935 100644
--- a/docs/api/getting-started.pug
+++ b/docs/api/getting-started.pug
@@ -70,5 +70,7 @@ block content
| 次に、#{api_url}/auth/session/userkey
へapp_secret
としてApp Secretを、token
としてセッションのトークンをパラメータとして付与したリクエストを送信してください。
br
| 上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます!
+ p
+ | 以降アクセストークンは、ユーザーのアクセストークン+アプリのシークレットキーをsha512したものとして扱います。
p アクセストークンを取得できたら、あとは簡単です。REST APIなら、リクエストにアクセストークンをi
としてパラメータに含めるだけです。
diff --git a/package.json b/package.json
index 423103c75d..1debc88538 100644
--- a/package.json
+++ b/package.json
@@ -69,6 +69,7 @@
"compression": "1.6.2",
"cors": "2.8.1",
"cropperjs": "1.0.0-beta",
+ "crypto": "0.0.3",
"deepcopy": "0.6.3",
"del": "2.2.2",
"elasticsearch": "12.1.3",
diff --git a/src/api/authenticate.ts b/src/api/authenticate.ts
index 832517379f..0a888e72d3 100644
--- a/src/api/authenticate.ts
+++ b/src/api/authenticate.ts
@@ -43,7 +43,7 @@ export default (req: express.Request) => new Promise(async (resolv
});
} else {
const userkeyDoc = await Userkey.findOne({
- key: token
+ hash: token
});
if (userkeyDoc === null) {
diff --git a/src/api/endpoints/auth/accept.js b/src/api/endpoints/auth/accept.js
index 7c45650c6b..9eb5d2e7e2 100644
--- a/src/api/endpoints/auth/accept.js
+++ b/src/api/endpoints/auth/accept.js
@@ -4,6 +4,8 @@
* Module dependencies
*/
import rndstr from 'rndstr';
+const crypto = require('crypto');
+import App from '../../models/app';
import AuthSess from '../../models/auth-session';
import Userkey from '../../models/userkey';
@@ -41,12 +43,23 @@ module.exports = (params, user) =>
});
if (exist === null) {
+ // Lookup app
+ const app = await App.findOne({
+ app_id: session.app_id
+ });
+
+ // Generate Hash
+ const sha512 = crypto.createHash('sha512');
+ sha512.update(key + app.secret);
+ const hash = sha512.digest('hex');
+
// Insert userkey doc
await Userkey.insert({
created_at: new Date(),
app_id: session.app_id,
user_id: user._id,
- key: key
+ key: key,
+ hash: hash
});
}
diff --git a/src/api/streaming.ts b/src/api/streaming.ts
index 84a0f9ddf4..dd28a0bc1e 100644
--- a/src/api/streaming.ts
+++ b/src/api/streaming.ts
@@ -64,7 +64,7 @@ function authenticate(connection: websocket.connection, token: string): Promise<
resolve(user);
} else {
const userkey = await Userkey.findOne({
- key: token
+ hash: token
});
if (userkey == null) {