マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

JWTJWS or JWE を使用する。

詳細

共通

共通鍵暗号化方式

  • audクレームに含まれる client_id に対応する
    client_secret の UTF-8 オクテットを使用する。
  • aud が複数要素の配列の場合の振る舞いは規定されない
    (azpのclient_id に対応する client_secretで暗号化されている可能性がある)。

公開鍵暗号化方式

  • 公開鍵はJWK Setで公開する必要がある。
  • JWK Set中に複数の鍵がある場合、JWSJWEヘッダにkidが必要。

署名(JWS

共通鍵暗号化方式

MACベースの署名

  • JWSヘッダに alg パラメタ値を設定
  • MAC 鍵は、アルゴリズムの最低限のオクテット長を持つ必要がある。
    • 例えばHS256では, 最低でも32オクテットが必要になる。
    • アルファベットに限定される場合、それ以上のオクテットが必要となる。

公開鍵暗号化方式

RSAおよびECDSAの署名

  • JWSヘッダに alg パラメタ値を設定

暗号化(JWE

共通鍵暗号化方式

  • をハッシュし切り詰めた左側を使用する。
  • ハッシュ・アルゴリズムは、以下を用いる。
    • 256ビット以下の鍵には SHA-256
    • 257-384ビットの鍵には SHA-384
    • 385-512ビットの鍵には SHA-512
  • 例えば
  • A128KW
    SHA-256ハッシュを切り詰めて128ビットを取り出す。
  • 512ビット以上の鍵が必要になった場合
    client_secretから鍵を導出する何らかの拡張仕様を定義する。

公開鍵暗号化方式

  • RSA
    ランダムな Content Encryption Key によってJWSをRSA暗号化アルゴリズムで暗号化する。
  • Elliptic Curve
    • JWEヘッダの epk に指定する短命な Elliptic Curve公開鍵を生成する。
    • ECDH-ESアルゴリズムを用いContent Encryption Keyの鍵を交換し、JWSを暗号化する。

鍵のローテーション

  • jwks_uri + JWK Set + kidでローテーションする。
  • Cache-Control ヘッダに max-age を含めJWK Setのキャッシュを適切にコントロールする。

署名

署名者がローテーションを行う。

  • 署名者は、
    • jwks_uriで、秘密鍵に対応する公開鍵のセットをJWK Setとして公開する。
    • JWSヘッダに、署名に使用した公開鍵(JWK Set中の kid)を含める
  • 検証者は、
    • jwks_uriで指定した場所からJWK Setを取得する。
    • JWSヘッダの kid から署名に使用した公開鍵を、上記のJWK Set中から取得する。
    • 取得した公開鍵を使用して署名の検証を行う。

暗号化

復号化を行う主体がローテーションを行う。
(古い鍵が使用される可能性があるため、鍵を暫く保持する)。

  • 復号化を行う主体は、
    • jwks_uriで、秘密鍵のセットをJWK Setとして公開する。
  • 暗号化を行う主体は、
    • jwks_uriで指定した場所からJWK Setを取得する。
    • JWEヘッダに、暗号化に使用した秘密鍵(JWK Set中の kid)を含める。
  • 復号化を行う主体は、
    • JWEヘッダの kid から暗号化に使用した秘密鍵を、上記のJWK Set中から取得する。
    • 取得した秘密鍵を使用して復号化を行う。

参考

暗号化アルゴリズム

JWT, JWS, JWE, JWK, JWA


Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-02-09 (日) 20:13:33 (1531d)