普通はJWT※注意として、algにnoneやHMAC-SHA*を指定することで署名検証を逃れることのできる脆弱性があるので、実装時はアルゴリズムのチェックは必ず行ってください。トークンの有効期限その他あった方が後々便利かも、と言った要素。アクセスするリソースサーバで認可されているリソース前述した通り、base64で変換しているだけなので、中身は誰でも見れてしまいます。重要な情報は絶対にいれないでください。Tokenの送信に使うヘッダAuthorizationヘッダに対し、Bearerスキームを設定するのが一般的のよう。TokenがJWTにあたります。JWTの署名検証を行うと分けてシステムを構築するのがベストです。モノリスなシステム構成であればAuthサーバとリソースサーバを同一にするケースもよくあります。localStorageがある。https)まで一致するかを見て同一生成元ポリシーを適用するので、デフォルトでsecure属性があるものと言えます結論つまりどちらも一長一短であるため、以下の点に注意してどちらを採用するかはXSSとCSRFの各脆弱性がサービスにどれくらいの影響を与えるかを考慮すべきです。tokenをcookieにいれ、secure・httpOnly属性をつける。サーバへの渡し方はCookieヘッダ。CSRF脆弱性は残る。重要な処理に「パスワード再入力」といった対策を挟む。localStorageにいれ、AuthorizationヘッダにBearerスキームでtokenを渡す。XSS脆弱性があるとセッションハイジャックされるので、フレームワークを利用してXSS脆弱性を排除する。Forgery(リクエスト強要)という名前の通り、攻撃者が正規ユーザを使って意図しないリクエスト(ただし正規ユーザからの正しいリクエストなのでサーバは受け取ってしまう)を実行し、サーバ側のデータを書き換える手法。CSRF脆弱性は見落としやすく、対応が大変ではありますが、書き込み系の重要な処理にのみ対応すれば大丈夫です。あるのはパスワードの再入力や、トークンを用いて対策するやり方です。XSSクライアント側にスクリプトを注入し、ページの書き換え(クレカ入力フォームを勝手に入れこんだり)やスクリプトを実行して(document.cookieでセッションIDをハイジャックしたり)ユーザに被害を与える手法。入力フォームやURLパラメータと言った要素に脆弱性が生まれやすい。入力要素をきちんとエスケープしたり、View用フレームワークを用いれば基本的には防げます。同一生成元ポリシーは罠ページからオリジナルページへのJSの実行を拒否する仕組みです。罠ページにiframeなどでオリジナルページを入れてもcookieやlocalStorageにはアクセスできません。XSSは罠ページからオリジナルページに対しスクリプトを注入し、オリジナルページ側でJSを実行させることで同一生成元ポリシーを回避する手法です。セッションハイジャックされたらどうなる?トークンには基本的に期限expをつけますが、その期間までは有効に扱えます。ログイン期間を増やすために、AccessトークンとRefreshトークンを分ける実装がありますが、Refreshトークンの方は盗まれた時の影響が大きいため、revokeする機能も実装する必要があります。HMACとデジタル署名の違いJWTはRS系やHS系といった、複数のアルゴリズムが用意されています。HMACできることメッセージが改竄されてるかチェック一方向ハッシュ関数はハッシュ値の衝突が起きないため。期待した通信相手からのものであるかチェック通信相手同士で鍵を共有すれば、メッセージに対して同じハッシュ化をすることができるため。複数の人が鍵を持っている場合、誰でもハッシュ化できるため、誰がこのメッセージを作ったのかが分からない。持つのは本人のみで、HMACのように鍵を共有する必要がないため。JWTではどちらを使うべきかトークン発行フローで述べたように認証&認可サーバとリソースサーバが別であれば、HMACでは機能が足りないためデジタル署名にすべきです。JWTを発行する認証&認可サーバでは秘密鍵を保持し、各リソースサーバではペアとなる公開鍵を利用して署名検証を行います。認証&認可サーバとリソースサーバが同一であれば、HMACの方で問題ありません。鍵長も短く済み、処理も速いためです。»プロフィールid:quoll00AWAのサーバ・インフラのリードエンジニアを経て現在AbemaTVにて開発。Webフロントもやります。(1)月別アーカイブはてなブログをはじめよう!quoll00さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。