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

目次

概要

  • ドイツの金融業界の要望に対応するため、驚くほどのスピードで策定され、
    駆け込みで FAPI Implementer's Draft 第二版と一緒に処理された。
  • 認可レスポンスのパラメタ群が一つの JWT にまとめられ、response={JWT} という形式で返ってくる。
  • JWT形式で Authorization Response を返すための仕様
  • Client / Authorization Server それぞれの metadata も拡張する

※ よくよく見ると、JWT Secured Authorization Request (JAR)(リクエスト)のレスポンス版である。

詳細

  • Authorization Response に JWT を使う方法が定義されている。
  • Response Type, Response Mode により、挙動とJWTの中身が違ってくる。
  • JWTのalgなどは仕様範囲外なので、よく考えて設計する必要がある。

Discovery / Registration

Discovery

response_modes_supportedパラメタで

をアドバタイズ

Registration

Client metadataを登録。

Metadata

Client metadata

Clientが、JWT の署名・暗号にどのアルゴリズムを使用して欲しいかを指定。

  • authorization_signed_response_alg
  • authorization_encrypted_response_alg
  • authorization_encrypted_response_enc

AuthZ metadata

AuthZがサポートするJWT の署名・暗号アルゴリズムを列挙。

  • authorization_signing_alg_values_supported
  • authorization_encryption_alg_values_supported
  • authorization_encryption_enc_values_supported

response_mode

query.jwt

HTTP/1.1 302 Found
Location: https://client.com/callback?response={JWT}

fragment.jwt

HTTP/1.1 302 Found
Location: https://client.example.com/cb#response={JWT}

form_post.jwt

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Cache-Control: no-cache, no-store
Pragma: no-cache
<html>
  <head><title>Submit This Form</title></head>
  <body onload="javascript:document.forms[0].submit()">
    <form method="post" action="https://client.example.com/cb">
     <input type="hidden" name="response" value="{JWT}"/>
    </form>
  </body>
</html>

jwt

  • ショートカット。以下の何れかを示す。

response_type

上記の{JWT}には、以下のペイロードを署名してJWS化したものを入れる。

code

{
  "iss":"https://accounts.example.com",
  "aud":"s6BhdRkqt3",
  "exp":1311281970,
  "code":"PyyFaux2o7Q0YfXBU32jhw.5FXSQpvr8akv9CeRDSd0QA",
  "state":"S8NJ7uqk5fY4EjNvP_G_FtyJu6pUsvH9jsYni9dMAJw"
}

token

{
   "iss":"https://accounts.example.com",
   "aud":"s6BhdRkqt3",
   "exp":1311281970,
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "state":"S8NJ7uqk5fY4EjNvP_G_FtyJu6pUsvH9jsYni9dMAJw",
   "token_type":"bearer",
   "expires_in":"3600",
   "scope":"example"
}

error

{
   "error":"access_denied",
   "state":"S8NJ7uqk5fY4EjNvP_G_FtyJu6pUsvH9jsYni9dMAJw"
}

実装に関する考察。

ベースライン

  • 一般的にcode系とtoken系でエンドポイントが分かれている。
  • queryとpostの共通化は(MVCのを使用している場合、バインダ機能により)容易のハズ。
  • fragmentについては、サーバで処理できないのでRedirectエンドポイントではスルーすれば良い(実装不要)。

code (authorization code)

  • 既定値
    • query
  • 追加実装
    既存のエンドポイントを流用可
  • query系
    • query
      既定値
    • query.jwt
      検証・デコード処理を追加。
  • fragment系
    • fragment
      SPAでPKCEを使用する際に必要になる。
    • fragment.jwt
      SPAでPKCEを使用する際に必要になる(jwtでセキュリティ強化)。
  • form_post系
    • form_post
      Formsから取得(メジャーなユースケース)。
    • form_post.jwt
      Formsから検証・デコードする。
  • 実装不要
    ...。

token (Implicit, Hybrid)

  • 既定値
    • fragment
  • 追加実装
    既存のエンドポイントを流用可
  • fragmen系
    • fragmen
      既定値
    • fragment.jwt
      検証・デコード処理を追加。
  • form_post系
    • form_post
      Formsから取得し、Hiddenに入れる。
    • form_post.jwt
      Formsから検証・デコードし、Hiddenに入れる。
  • 実装不要
    • query系
      fragment → queryはNG(JWE化していればOKらしいが...。)
      • query
      • query.jwt

参考

インフル諸兄

TakahikoKawasaki?

ritou

関連仕様

OAuth 2.0 Form Post Response Mode

OAuth 2.0 Multiple Response Type Encoding Practices

OpenID Connect - Discovery

OpenID Connect - Dynamic Client Registration

FAPI Part 2 (Read and Write API Security Profile)


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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-26 (水) 16:49:30 (52d)