• 検索結果がありません。

第 4 章 クラウドサービス事業者向け実装ガイド

4.1. OpenID Connect RP (クライアント)の実装

4.1.5. ID トークンの検証

POST /catch_response HTTP/1.1 Host: www.svc.example.net

Content-Type: application/x-www-form-urlencoded

error=access_denied&error_description=User%20authentication%20failed.&state=k4y97kl szxi

認証結果を受け取ると、最初に state 値が認証要求時に指定した値と同一であるかどうかを検 証する。

state 値が一致しない場合は、受け取ったレスポンス(エラーコードとエラーの詳細)は信頼

することができない。

認証失敗の応答を受け取った場合は、state 値の検証結果にかかわらず認証エラーとし、ユー ザーを適切なページへ誘導する必要がある。適切なページとは、エラーメッセージを表示する ページのことを指す。

{

"alg": "RS256", "kid": "iAw5"

}

2 番目のパートは、ID トークンのクレームとなっている。少なくとも [3.4.1 節] に示したク レームが含まれている。

ID トークンのクレームの例を以下に示す。通常の認証要求の場合、auth_time は含まれない。

(含まれていても良い)

{

"iss": "https://op.com.example.co.jp", "sub": "e1234567",

"aud": "pWBoRam9sG", "nonce": "q8k-upBX4Z_A", "exp": 1435709162, "iat": 1435708862 }

IDトークンの検証として、最低限、次の事項を検証する。

1. iss クレームが、認証要求を送った利用企業の認証サーバーの URL と一致することを検 証する。

2. audクレームが、自クラウドサービスに割り当てられた client_idであることを検証する。

もしaudクレームが複数の値を持つ場合は、OpenID Connect Core 1.0 [OpenID.Core]

のSection 3.1.3.7の定義に従った追加の検証が必要である。

3. IDトークンの署名を、RS256アルゴリズムを用いて検証する。

IDトークンのbase64urlエンコーディングされた1番目、2番目のパートを '.' で連結し た文字列を、ハッシュ関数に SHA-256 を使うように構成された RSASSA-PKCS1-v1_5 署名検証器にかけることで検証を行なう。

具体的な手順はJWS [RFC7515] のSection 5.2, Section A.2 などに示されている。署名 検証に用いる公開鍵の取得方法は [4.1.9節] に示す。

もし、ID トークンに RS256 以外の署名アルゴリズムが指定されており、その署名をク ラウドサービスが検証可能な場合は、その検証で代替しても良い。

4. 現在時刻がexpクレームで指定された時刻よりも前であることを検証する。

5. nonce クレームが、クライアント(ブラウザ)セッションと紐付いた nonce 値と一致す

ることを検証する。

6. logout_onlyクレームが含まれていないことを検証する。

ID トークンの検証に失敗した場合は認証エラーとし、ユーザーを適切なページへ誘導する必 要がある。適切なページとは、エラーメッセージを表示するページのことを指す。

ID トークンの検証に成功した場合は、認証されたユーザーとクラウドサービスのユーザーと の紐付けに進む。

4.1.5.2. 再認証要求の場合の ID トークンの検証

再認証要求を行なった場合には、IDトークンのクレームにauth_timeが必ず含まれる。

{

"iss": "https://op.com.example.co.jp", "sub": "e1234567",

"aud": "pWBoRam9sG", "nonce": "q8k-upBX4Z_A", "exp": 1435710062, "iat": 1435709762, "auth_time": 1435709762 }

再認証要求を行なった場合の ID トークンの検証では、別ユーザーでの再認証の突破や代替の ID トークンの挿入による再認証回避を防止するため、[4.1.5.1 節] に示した ID トークンの検証 事項に加え、次の事項を検証する。

1. iss クレームと sub クレームの値がそれぞれ、現在サービスを使用しているユーザーの

「ID ト ー ク ン の Issuer」(idTokenClaims.issuer) と 「ID ト ー ク ン の Subject」 (idTokenClaims.subject) の値と一致していることを検証する。

2. auth_timeクレームの値が、妥当な範囲で現在時刻に近いことを検証する。

ID トークンの検証に失敗した場合は認証エラーとし、ユーザーを適切なページへ誘導する必 要がある。適切なページとは、エラーメッセージを表示するページのことを指す。

ユーザーの操作性を考慮すると、ID トークンの検証に失敗した場合でも再認証要求前のセッ ション状態を維持し、再認証を必要とする処理へのリトライができるようにサービスを実装する ことが必要である。

ID トークンの検証に成功した場合は再認証が成功したものとみなし、ユーザーが要求した処 理を実行する。