OpenID Connect/AB周りの仕様について、さっぱりMLに貢献できておりませんが、少しでも近況を多くの人に広めて良いものができる手伝いができればと思っています。
今回は、"OpenID Connect Core 1.0 draft 01"です。
名前の通り、Coreということで用語やフロー、やりとりされる内容が定義されています。
Terminology
OAuth 2.0の用語に加えて、OpenID関連の以下の用語が加えられています。
- OpenID Provider (OP) : OpenID ConnectのメッセージをサポートするAuthZ Server
- Relying Party (RP) : Client と Resource Servers(?)
- OP Endpoints : AuthN/AuthZ Endpoint + Token Endpoint
- RP Endpoints : リダイレクトでOPのレスポンスが返されるEndpoint
- UserInfo Endpoint : ClientからTokenを受け取り、ユーザーの認可された情報を返すprotected resource
ClaimsもOpenID関連かな。
RPがResource Serversってのはどういう意味合いなのでしょうかね。
あとで質問してみましょうか。
Overview
OpenID Connectの流れの"概要"は以下の通り。
- ClientはServerのEnd-User AuthZ Endpointにリクエストを送る
- Serverはユーザーを認証し、適切は認可を得る
- ServerはAccess Tokenといくつかの他の変数を返す
- ClientはリクエストをAccess TokenとともにUserinfo Endpointにリクエストを送る
- Userinfo EndpointはServerにサポートされている追加のユーザー情報を返す
細かい仕様はArtifact Bindingとか他のBindingによって個別に定義されるとして、とりあえずOAuth 2.0の要領でUserinfo EndpointにAccess Tokenをぶつけて属性情報を取得するって感じのことが書いてあります。
あとは署名がつけられたり暗号化されたりするかもしれなくて、暗号化よりも先に署名するってこともちょっと書いてありますね。
Authorization Request
OAuth 2.0のパラメータでいうところのscopeパラメータには"openid"を含みます。
さらに、以下の2つのパラメータがtop levelで追加されます。
そして、以下のOpenID Auth 2.0でおなじみのパラメータ達もopenidパラメータの下で送られますよと。
- type : 必須 "http://openid.net/specs/cc/1.0/#req"
- immediate : 任意 immediateモードの場合はTrue,デフォルトはFalse
- claimed_id : 任意 説明省略
- identity : 任意 説明省略
- realm : PPIDが必要な時は必須
- server_id : 任意 リクエスト先のOP識別子
- pubkey : 任意 base64 url encodeされたRPのX.509証明書
- atype : 任意 返されるassertionのType。種類はいろいろ
Query Parameters serialization と JSON serializationのサンプルが載ってます。
Access Token Request
- client_secret : secret_typeが"shared"の場合は共有しているSecretの値、"jwt"の場合は"code"にJWTで署名したcompact serealizationの値
- secret_type : client_secretの種類。"shared"(default)もしくは"jwt"
Access Token Response
レスポンスに"openid"のキーが含まれます。
サブキーはこちら。
- type : 必須. メッセージの種類 "http://openid.net/specs/cc/1.0#id_res"
- user_id : 必須 255バイト以下のローカル識別子
- domain : 必須 user_idとともにグローバルに識別するためのAuthZ Serverの識別子
- access_tokens : 任意 "endpoint", "access_token", "user_id" and "expires_in"のサブキーを持っているJSONオブジェクトの配列
- claimed_id : 任意 説明省略
- identity : 任意 説明省略
- server_id : 必須 説明省略
- client_id : 必須 説明省略
- issued_at : 必須 説明省略
- op_endpoint : 任意 説明省略
UserInfo Request
属性情報取得のためのリクエストですね。
UserInfo Response
返される属性はこちら。
今日はここまで
"次のOpenIDはOAuth 2.0ベースになるんだぜ"って話、今回のでイメージがわいてきましたね。
この他、serializations,encodings,Signaturesなど細かい定義が書いてありますが、今回はここまでにしましょう。
次回は、Bindingの仕様として"OpenID Connect Artifact Binding 1.0 - draft 01"を読みたいと思います。
今回のCore Specよりももうちょっと具体的な仕様になってるのではないかと思います。
もっと煮詰まって仕様が決まりそうになったら例の人たちにがっつり翻訳してもらいましょう。
ではまた。