OpenID Connect Core draft 01の内容をななめ読み

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の流れの"概要"は以下の通り。

  1. ClientはServerのEnd-User AuthZ Endpointにリクエストを送る
  2. Serverはユーザーを認証し、適切は認可を得る
  3. ServerはAccess Tokenといくつかの他の変数を返す
  4. ClientはリクエストをAccess TokenとともにUserinfo Endpointにリクエストを送る
  5. Userinfo EndpointはServerにサポートされている追加のユーザー情報を返す

細かい仕様はArtifact Bindingとか他のBindingによって個別に定義されるとして、とりあえずOAuth 2.0の要領でUserinfo EndpointにAccess Tokenをぶつけて属性情報を取得するって感じのことが書いてあります。
あとは署名がつけられたり暗号化されたりするかもしれなくて、暗号化よりも先に署名するってこともちょっと書いてありますね。

Messages

Overviewのちょっと細かい説明。
そして、リクエスト/レスポンスはQuery String serializationもしくはJSONの形式でやりとりされます。

Authorization Request

OAuth 2.0のパラメータでいうところのscopeパラメータには"openid"を含みます。
さらに、以下の2つのパラメータがtop levelで追加されます。

  • openid : 必須 OpenID関連のリクエストパラメータのJSONオブジェクト
  • type : 必須 JSONオブジェクトのタイプ

そして、以下の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

属性情報取得のためのリクエストですね。

  • access_token : 必須
  • user_id : 任意 Access Tokenから引ければ不要っぽいですね
  • client_id : 必須

UserInfo Response

返される属性はこちら。

  • user_id : 必須
  • client_id : 必須
  • asserted_user : 必須 認可済みのユーザーなら"true"、リクエストのaccess_tokenとuser_idが合っていなかったら"false"
  • profile_urls : 任意 プロフィールURLの配列
  • display_name : 任意
  • given_name : 任意
  • family_name : 任意
  • email : 任意
  • language : 任意
  • picture : 任意

今日はここまで

"次のOpenIDはOAuth 2.0ベースになるんだぜ"って話、今回のでイメージがわいてきましたね。

この他、serializations,encodings,Signaturesなど細かい定義が書いてありますが、今回はここまでにしましょう。
次回は、Bindingの仕様として"OpenID Connect Artifact Binding 1.0 - draft 01"を読みたいと思います。
今回のCore Specよりももうちょっと具体的な仕様になってるのではないかと思います。

もっと煮詰まって仕様が決まりそうになったら例の人たちにがっつり翻訳してもらいましょう。
ではまた。