[BREAKING CHANGE] Improve security
This commit is contained in:
parent
86548f6468
commit
9458245382
5 changed files with 19 additions and 3 deletions
|
@ -70,5 +70,7 @@ block content
|
|||
| 次に、<code>#{api_url}/auth/session/userkey</code>へ<code>app_secret</code>としてApp Secretを、<code>token</code>としてセッションのトークンをパラメータとして付与したリクエストを送信してください。
|
||||
br
|
||||
| 上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます!
|
||||
p
|
||||
| 以降アクセストークンは、<strong>ユーザーのアクセストークン+アプリのシークレットキーをsha512したもの</strong>として扱います。
|
||||
|
||||
p アクセストークンを取得できたら、あとは簡単です。REST APIなら、リクエストにアクセストークンを<code>i</code>としてパラメータに含めるだけです。
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -43,7 +43,7 @@ export default (req: express.Request) => new Promise<IAuthContext>(async (resolv
|
|||
});
|
||||
} else {
|
||||
const userkeyDoc = await Userkey.findOne({
|
||||
key: token
|
||||
hash: token
|
||||
});
|
||||
|
||||
if (userkeyDoc === null) {
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue