依存
まず必要なパッケージをインストールします。
yarn add express express-jwt jsonwebtokenトークンを生成
次の1行のコマンドで作れます。第2引数は復元に使うので覚えておきます。
node -e "console.log( require('jsonwebtoken').sign({value:'foo'}, 'a') )"
# eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2YWx1ZSI6ImZvbyIsImlhdCI6MTUzNTU2NDUyNH0.Mkz75dMlWnK2Y_8g7CGjqwLNvlc1pC3O8znGuUP5ZS8復元を試します。第2引数は同じものを指定します。
ちゃんとオブジェクトが表示されてれば大丈夫。
node -e "console.log( require('jsonwebtoken').verify('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2YWx1ZSI6ImZvbyIsImlhdCI6MTUzNTU2NDUyNH0.Mkz75dMlWnK2Y_8g7CGjqwLNvlc1pC3O8znGuUP5ZS8', 'a') )" 02:42:24
# { value: 'foo', iat: 1535564524 }Expressサーバーで認証する
まずlocalhost:3333でokとだけ返す所まで作ります。
const express = require('express');
const jwt = require('express-jwt');
const app = express();
app.use('/', /* jwt middleware が入る */ (req, res) => res.sendStatus(200));
app.listen(3333);app.useの第2引数でexpress-jwtを使います。設定は次の通り。
secretは上記で発行した時に使ったものをrequestPropertyは、デフォルトではreq.userに値が入るのですが、今回はユーザー情報でも何でもないのでなんとなくreq.dataでちなみに
resultPropertyはreq.res.dataになるみたいですなんか知った)
getTokenはトークンの置き場を自分で探して見つけたトークンを返してます。今はAuthorizationだけ見ます
app.use(
'/',
jwt({
secret: 'a',
requestProperty: 'data',
getToken(req) {
if (
req.headers.authorization &&
req.headers.authorization.split(' ')[0] === 'Bearer'
) {
return req.headers.authorization.split(' ')[1];
}
return null;
}
}),
(req, res) => res.status(200).send(req.data)
);実装は終わったで、あとはサーバーを建ててcurlで試してみます。レスポンスがjsonなら大丈夫です!
curl -H 'Authorization: Bearer {トークン}' http://localhost:3333
# {"value":"foo",...}UnauthorizedError: invalid signatureの場合はどこかおかしいのでsecret合ってるかどうかなど確認しましょう。