メタデータの公開

はじめに

本記事では、OpenID プロバイダー (OP) もしくは認可サーバー (AS) が、Authlete API を用いてサーバーメタデータを公開する方法を解説します。

Authlete で認可サーバーのメタデータを生成する

OAuth や OpenID Connect ではクライアントやリライングパーティー (RP) などが、認可サーバーの情報を得るためのメタデータが定義されています。 具体的には OpenID Connect Discovery RFC 8414 OAuth 2.0 Authorization Server Metadata があります。

Authlete が提供する /api/service/configuration API を利用することで、上記 2 つの仕様に則したメタデータを生成できます。

OpenID Connect Discovery

OpenID Connect Discovery ドキュメントをサポートする認可サーバーは、https://as.example.comissuer としたとき、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 Authorization Server Metadata

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 がサポートする複数のアルゴリズムが応答されますが、認可サーバーが想定する値に上書きして公開するといった運用をいただけます。

JSON Patch による 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 を独自のロジックでカスタマイズすることも出来ます。