「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Finalを参照して記述。
Client(RP)が、(Discoveryで発見した)Idp/STS(OP)に、動的な登録を行う、
「クライアント登録エンドポイント」の仕様について記載してある。
TLSサポートと、TLS証明書のチェックが必要。
クライアント・メタデータの値は、次の2つの方法で使用される。
# | パラメタ | 要件 | 説明 |
1 | redirect_uris | REQUIRED | 登録したクライアントのredirect_uriのJSON配列 |
2 | response_types | OPTIONAL | response_type値のJSON配列。既定値は「code」。 |
3 | grant_types | OPTIONAL | grant_type値のJSON配列。既定値は「authorization_code」。 |
4 | subject_type | OPTIONAL | subject_types_supportedに対応するsubクレームの種類(public or pairwise) |
5 | sector_identifier_uri | OPTIONAL | pairwise値の計算に利用する(pairwiseをサポートする場合は必須)。 |
# | パラメタ | 要件 | 説明 |
1 | default_max_age | OPTIONAL | デフォルトの最大認証期間。max_age要求パラメタの既定値。 |
2 | require_auth_time | OPTIONAL | IDトークンのauth_time要求の要否 |
3 | token_endpoint_auth_method | OPTIONAL | クライアント認証のタイプ。 既定値はclient_secret_basic。 |
4 | default_acr_values | OPTIONAL | デフォルトの認証コンテキスト クラス参照値。acr_values要求パラメタの既定値。 |
5 | request_uris | OPTIONAL | 事前に登録されたrequest_uri値の配列。 Discovery の require_request_uri_registrationで事前登録要求可能 |
6 | initiate_login_uri | OPTIONAL | ログイン開始エンドポイントのURL |
# | パラメタ | 要件 | 説明 |
1 | application_type | OPTIONAL | native or webのJSON配列。既定値は「web」。 |
2 | contacts | OPTIONAL | クライアントを担当する担当者の電子メールアドレスの配列。 |
3 | client_name | OPTIONAL | クライアントがエンドユーザに提示する、クライアント名。 |
4 | logo_uri | OPTIONAL | クライアントがエンドユーザに提示する、アプリケーションのロゴのURL。 |
5 | client_uri | OPTIONAL | クライアントがエンドユーザに提示する、ホームページのURL。 |
6 | policy_uri | OPTIONAL | クライアントがエンドユーザに提示する、プロファイル利用規約のURL。 |
7 | tos_uri | OPTIONAL | クライアントがエンドユーザに提示する、サービス利用規約のURL。 |
# | パラメタ | 要件 | 説明 | |
1 | JWK | |||
1-1 | jwks | OPTIONAL | JWK Set | |
1-2 | jwks_uri | OPTIONAL | jwks_uri | |
2 | クライアント認証 | |||
2-1 | token_endpoint_auth_signing_alg | OPTIONAL | クライアント認証署名アルゴリズム (Discovery の token_endpoint_auth_signing_alg_values_supportedに対応) 既定値はRS256, 署名なし不可。 | |
3 | IDトークン | |||
3-1 | id_token_signed_response_alg | OPTIONAL | IDトークン署名アルゴリズム (Discovery の id_token_signing_alg_values_supportedに対応) 既定値はRS256。 | |
3-2 | id_token_encrypted_response_alg | OPTIONAL | IDトークン暗号化アルゴリズム (Discovery の id_token_encryption_alg_values_supportedに対応) 既定値は暗号化なし。 | |
3-3 | id_token_encrypted_response_enc | OPTIONAL | IDトークン暗号化アルゴリズム (Discovery の id_token_encryption_enc_values_supportedに対応) 既定値はA128CBC-HS256(algがあれば必要)。 | |
4 | ユーザー属性エンドポイント | |||
4-1 | userinfo_signed_response_alg | OPTIONAL | ユーザー属性エンドポイント署名アルゴリズム (Discovery の userinfo_signing_alg_values_supportedに対応) 既定値は署名なし。 | |
4-2 | userinfo_encrypted_response_alg | OPTIONAL | ユーザー属性エンドポイント暗号化アルゴリズム (Discovery の userinfo_encryption_alg_values_supportedに対応) 既定値は暗号化なし。 | |
4-3 | userinfo_encrypted_response_enc | OPTIONAL | ユーザー属性エンドポイント暗号化アルゴリズム (Discovery の userinfo_encryption_enc_values_supportedに対応) 既定値はA128CBC-HS256(algがあれば必要)。 | |
5 | Requestオブジェクト | |||
5-1 | request_object_signing_alg | OPTIONAL | Requestオブジェクト署名アルゴリズム (Discovery の request_object_signing_alg_values_supportedに対応) 既定値はRS256, 署名なし可。 | |
5-2 | request_object_encryption_alg | OPTIONAL | Requestオブジェクト暗号化アルゴリズム (Discovery の request_object_encryption_alg_values_supportedに対応) 既定値はRPの宣言なし。 | |
5-3 | request_object_encryption_enc | OPTIONAL | Requestオブジェクト暗号化アルゴリズム (Discovery の request_object_encryption_enc_values_supportedに対応) 既定値はA128CBC-HS256(algがあれば必要)。 |
POST /connect/register HTTP/1.1 Content-Type: application/json Accept: application/json Host: server.example.com Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJ ... { "application_type": "web", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "My Example", "client_name#ja-Jpan-JP": "クライアント名", "logo_uri": "https://client.example.org/logo.png", "subject_type": "pairwise", "sector_identifier_uri": "https://other.example.net/file_of_redirect_uris.json", "token_endpoint_auth_method": "client_secret_basic", "jwks_uri": "https://client.example.org/my_public_keys.jwks", "userinfo_encrypted_response_alg": "RSA1_5", "userinfo_encrypted_response_enc": "A128CBC-HS256", "contacts": ["ve7jtb@example.org", "mary@example.org"], "request_uris": ["https://client.example.org/rf.txt #qpXaRLh_n93TTR9F252ValdatUQvQiJi5BDub2BeznA"] }
登録メタデータとともに、プロビジョニングされたフィールドを含めて返す。
# | パラメタ | 要件 | 説明 |
1 | client_id | REQUIRED | 登録したクライアントのclient_id |
2 | client_id_issued_at | OPTIONAL | client_idが発行された時刻。 |
3 | client_secret | OPTIONAL | 登録したクライアントのclient_secret (PKCEやprivate_key_jwtなどのケースがあるので) |
4 | client_secret_expires_at | REQUIRED | client_secretが期限切れになる時刻。 (client_secretが発行された場合は必須) |
5 | registration_access_token | OPTIONAL | 後続のクライアント登録操作を実行するための登録アクセス トークン。 |
6 | registration_client_uri | OPTIONAL | 前述のregistration_access_tokenを使用して、 後続のクライアント登録操作を実行するための構成エンドポイントの場所。 |
HTTP/1.1 201 Created Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "client_id": "s6BhdRkqt3", "client_secret": "ZJYCqe3GGRvdrudKyZS0XhGv_Z45DuKhCUk0gBR1vZk", "client_secret_expires_at": 1577858400, "registration_access_token": "this.is.an.access.token.value.ffx83", "registration_client_uri": "https://server.example.com/connect/register?client_id=s6BhdRkqt3", "token_endpoint_auth_method": "client_secret_basic", "application_type": "web", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "My Example", "client_name#ja-Jpan-JP": "クライアント名", "logo_uri": "https://client.example.org/logo.png", "subject_type": "pairwise", "sector_identifier_uri": "https://other.example.net/file_of_redirect_uris.json", "jwks_uri": "https://client.example.org/my_public_keys.jwks", "userinfo_encrypted_response_alg": "RSA1_5", "userinfo_encrypted_response_enc": "A128CBC-HS256", "contacts": ["ve7jtb@example.org", "mary@example.org"], "request_uris": ["https://client.example.org/rf.txt #qpXaRLh_n93TTR9F252ValdatUQvQiJi5BDub2BeznA"] }
HTTP/1.1 400 Bad Request Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "error": "invalid_redirect_uri", "error_description": "One or more redirect_uri values are invalid" }
定義された仕様はHTTP GETメソッドのみ
registration_access_tokenで返された登録アクセス トークンを使用
GET /connect/register?client_id=s6BhdRkqt3 HTTP/1.1 Accept: application/json Host: server.example.com Authorization: Bearer this.is.an.access.token.value.ffx83
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "client_id": "s6BhdRkqt3", "client_secret": "OylyaC56ijpAQ7G5ZZGL7MMQ6Ap6mEeuhSTFVps2N4Q", "client_secret_expires_at": 17514165600, "registration_client_uri": "https://server.example.com/connect/register?client_id=s6BhdRkqt3", "token_endpoint_auth_method": "client_secret_basic", "application_type": "web", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "My Example", "client_name#ja-Jpan-JP": "クライアント名", "logo_uri": "https://client.example.org/logo.png", "subject_type": "pairwise", "sector_identifier_uri": "https://other.example.net/file_of_redirect_uris.json", "jwks_uri": "https://client.example.org/my_public_keys.jwks", "userinfo_encrypted_response_alg": "RSA1_5", "userinfo_encrypted_response_enc": "A128CBC-HS256", "contacts": ["ve7jtb@example.org", "mary@example.org"], "request_uris": ["https://client.example.org/rf.txt #qpXaRLh_n93TTR9F252ValdatUQvQiJi5BDub2BeznA"] }
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer error="invalid_token", error_description="The access token expired" Cache-Control: no-store Pragma: no-cache
GET /file_of_redirect_uris.json HTTP/1.1 Accept: application/json Host: other.example.net
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache [ "https://client.example.org/callback", "https://client.example.org/callback2", "https://client.other_company.example.net/callback" ]
必要に応じて以下をサポートしても良い。
-
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth