Web APIのテストでcurlコマンドなどをよく使いますが、Postmanという便利なツールを最近下記記事で使い、
Avalanche Postman-collection
http://bitlife.me/bc/2022/04/02/
もう少しまとめてみようと思いました。
やりたかったことはサーバからのレスポンスを次のリクエストで利用する形です。
まずはセッション変数のようなものを考えましたが、下記参考記事JSON Web TokenにあるOAuthの一部ぶあるBearer認証というものを使ったことがなかったためこれを試してみました。(Basic認証、Digest認証と同類)
参考)
https://qiita.com/sa9ra4ma/items/67edf18067eb64a0bf40
https://qiita.com/Molly95554907/items/ce1eef7e4afe02bb2b4d
Postman
https://www.postman.com/
上記で登録するとWebアプリが使える
https://web.postman.co/
※ローカルアクセスするためにPostman Agentもインストールした
まずはPOSTリクエストによるユーザ登録をしてトークンを受け取ります。(passwordはここではおかざり)
受け取ったトークンをPostmanの環境変数に登録する設定もしておきます。(POSTの設定に)
受け取ったトークンが環境変数に登録された様子(あらかじめNew Environmentを用意しておく。ネーミングはすべてデフォルト)
次にトークンからユーザ名を取得するGETリクエストします。(実用的には登録したユーザ情報)
Authにトークンが格納されている環境変数名を記述
レスポンスを確認しました。
サーバは参考サイトにあるnodejsのコードを使わせていただきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
const express = require("express"); const jwt = require("jsonwebtoken"); const PORT = 3000; const app = express(); app.use(express.json()) app.use(express.urlencoded({ extended: true })); const SECRET_KEY = "abcdefg"; app.post('/login', (req, res) => { const payload = { user: req.body.user }; const option = { expiresIn: '1m' } const token = jwt.sign(payload, SECRET_KEY, option); res.json({ message: "create token", token: token }); }); const auth = (req, res, next) => { let token = ''; if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { token = req.headers.authorization.split(' ')[1]; } else { return next('token none'); } jwt.verify(token, SECRET_KEY, function(err, decoded) { if (err) { next(err.message); } else { req.decoded = decoded; next(); } }); } app.get('/user', auth, (req, res) => { res.send(200, `your name is ${req.decoded.user}!`); }); app.use((err, req, res, next)=>{ res.send(500, err) }) app.listen(PORT, () => console.info('listen: ', PORT)); |