Table of Contents
本記事では、OpenID プロバイダー (OP) もしくは認可サーバー (AS) が、Authlete API を用いてサーバーメタデータを公開する方法を解説します。
OAuth や OpenID Connect ではクライアントやリライングパーティー (RP) などが、認可サーバーの情報を得るためのメタデータが定義されています。 具体的には OpenID Connect Discovery RFC 8414 OAuth 2.0 Authorization Server Metadata があります。
Authlete が提供する /api/service/configuration API を利用することで、上記 2 つの仕様に則したメタデータを生成できます。
OpenID Connect Discovery ドキュメントをサポートする認可サーバーは、https://as.example.com を issuer としたとき、https://as.example.com/.well-known/openid-configuration で GET リクエストを受け付けます。
認可サーバーの実装は、Authlete の /api/service/configuration API を呼び出し、応答を(必要に応じて取捨選択・加工したもの)を JSON として返却します。
/api/service/configuration の呼び出し例は以下の通りです。
curl --request GET \
--url 'https://jp.authlete.com/api/<serviceId>/service/configuration?pretty=true' \
--header 'authorization: Bearer <serviceAccessToken>' \
--header 'content-type: application/json'
応答はメタデータとなる JSON の文字列がそのまま返却されます。
{
"issuer": "https://as.example.com",
"authorization_endpoint": "https://as.example.com/api/authorization",
"prompt_values_supported": [
"none",
"login",
"consent",
"select_account",
"create"
],
"token_endpoint": "https://as.example.com/api/token",
"userinfo_endpoint": "https://as.example.com/api/userinfo",
"jwks_uri": "https://as.example.com/api/jwks",
"scopes_supported": [
"address",
"email",
"openid",
"offline_access",
"phone",
"profile",
"edit_payment_methods",
"grant_management_query",
"grant_management_revoke"
],
...
}
OAuth 2.0 クライアント向けには、RFC 8414 に従い、https://as.example.com/.well-known/oauth-authorization-server の URL で OAuth Server Metadata を公開できます。
OIDC Discovery と同様に、このエンドポイントでも /api/service/configuration API の応答を利用可能です。
OIDC Discovery ドキュメントおよび OAuth Server Metadata については、認可サーバーやクライアントでキャッシュを実装しても構いません。 キーローテーションの期間などを検討の上、適切なキャッシュの実装を検討ください。
Authlete 管理コンソールで設定した一部の項目は /api/service/configuration API の応答に反映されます。
例えば発行者識別子 (issuer) や認可エンドポイントなどの各エンドポイントの設定、サポートする認可タイプなどは、自動で /api/service/configuration API の応答に反映されます。
メタデータに含まれる具体的な設定項目については Service の設定 をご確認ください。
/api/service/configuration API で返却される情報は認可サーバー側にて取捨選択いただけます。例えば id_token_signing_alg_values_supported は Authlete がサポートする複数のアルゴリズムが応答されますが、認可サーバーが想定する値に上書きして公開するといった運用をいただけます。
Authlete では、/api/service/configuration API の応答を RFC 6902 JSON Patch に基づいてカスタマイズできます。
id_token_signing_alg_values_supported を ["RS256"] のみに制限するcurl --request GET \
--url 'https://jp.authlete.com/api/<serviceId>/service/configuration?patch=%5B%7B%22op%22%3A%20%22replace%22%2C%20%22path%22%3A%20%22%2Fid_token_signing_alg_values_supported%22%2C%20%22value%22%3A%20%5B%22RS256%22%5D%7D%5D' \
--header 'authorization: Bearer <serviceAccessToken>' \
--header 'content-type: application/json'
また、認可サーバーで受け取った JSON を独自のロジックでカスタマイズすることも出来ます。