Open棟梁Project - マイクロソフト系技術情報 Wiki
ユースケースに対応するため、
多様な環境をサポートできる。
OAuth 2.0に認証結果とプロフィールの受渡し機能のみを追加した仕様
OAuth 2.0 Authorization Code Grantを拡張
OAuth 2.0 Implicit Grantを拡張
リクエスト内の細かいクレーム指定や認証コンテキストの指定
OAuth 2.0に追加で必要となるメッセージの使用
Messagesの内容をHTTPに落とし込んだHTTPバインディング仕様
メールアドレスやURLからユーザが利用しているOPを特定する方法
動的なRP登録を行う方法
Idp(OP)上でユーザーがログアウトしたときにRP側から検知する方法など、セッション管理の方法
以下で説明しているシーケンス
ネイティブアプリやJavaScriptが使用するシーケンス。
SAMLやOpenID Connectの組合せのシーケンス?
Idp(OP)は、扱うクレームの内容によって、
どちらを利用すべきかを判断する必要がある。
一定期間変更されないことが保証されており
キャッシュの効果があるものは集約クレーム。
クレームそのものではなく、問い合わせ先のURLを扱う。
をレスポンスに含む。
頻繁に更新されるものは分散クレーム。
クレーム(JSONデータ)の
の方法は、IETFのJOSE WGにて仕様が策定されている。
JSONデータで表現されたクレームを、
STEP 0 は事前準備なので、STEP 1 からが実際の認証・認可のシーケンス。
Idp(OP)にRPを登録し、
を入手する。
RPがIdp(OP)からAuthorization codeを取得。
https://・・・Idp(OP)のAuthorization code取得用のURL・・・? response_type=code+id_token &client_id={client_id} &redirect_uri=・・・RPのURL・・・ &state=CSRF対策のランダム文字列 &scope=openid+profile &nonce=リプレイアタック対策のランダム文字列
パラメータ | 必須 | 説明 |
response_type | ○ | 「code」と「id_token」を指定 |
client_id | ○ | 事前に準備したclient_idの値を指定 |
redirect_uri | ○ | アプリケーションID登録時のコールバックURLに入力したURLを指定 |
state | CSRF対策のランダム文字列を指定 | |
scope | ○ | ・openid:ユーザー識別子を取得(必須) ・profile:姓名・生年・性別が取得 ・email:メールアドレスと確認済みフラグを取得 ・address:ユーザー登録住所情報が取得 |
nonce | id_tokenを取得する際は必須 | リプレイアタック対策のランダム文字列を指定 |
display | ユーザのUIを選択: ・page(PC用UI、デフォルト値) ・touch(スマートフォン用UI) ・wap(フィーチャーフォン用UI) ・inapp(ネイティブアプリ用UI)~ | |
その他、Idp(OP)独自パラメタ | - |
http://・・・RPのURL・・・?code=xxxxxxxx&state=CSRF対策のランダム文字列
パラメータ | 必須 | 説明 |
grant_type | ○ | authorization_code という固定文字列を指定 |
code | ○ | Authorization codeを指定、リクエスト送信後は使用できなくなる。 |
redirect_uri | ○ | STEP 1 のredirect_uriで指定したURLを入力。 |
{ "access_token":"{ヘッダー部}.{ペイロード部}.{シグネチャー部}", "token_type":"bearer", "expires_in":"3600", "refresh_token":"・・・", "id_token":"・・・" }
"access_token"の
{ "typ":"JWT", "alg":"HS256" }
{ "iss":"https:\/\/・・・Access Tokenの発行元URL・・・", "user_id":"ユーザー識別子", "aud":"アプリケーションID(client_id)と一致する値", "iat":IDトークンの発行時刻, "exp":IDトークンの有効期限, "nonce":"STEP 1 のnonceと一致する値" }
{ "user_id":"・・・", "name":"・・・", "given_name":"・・・", "given_name#ja-Kana-JP":"・・・", "given_name#ja-Hani-JP":"・・・", "family_name":"・・・", "family_name#ja-Kana-JP":"・・・", "family_name#ja-Hani-JP":"・・・", "gender":"male or female", "birthday":"YYYY", "locale":"ja-JP,etc." }
STEP 1以降のモバイルアプリにおける差異が不明だった。
IdP(OP)探索と動的なRP登録
結果的に、OPからRP識別のための“cient_id”がレスポンスされる。
認可リクエスト
認可応答
IDトークンの検証
UserInfo?エンドポイントへのアクセス