> ## Documentation Index
> Fetch the complete documentation index at: https://developers.authlete.com/llms.txt
> Use this file to discover all available pages before exploring further.

# メタデータの公開

> OpenID Provider Metadata および OAuth 2.0 Authorization Server メタデータの公開方法。

## はじめに

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

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

OAuth や OpenID Connect ではクライアントやリライングパーティー (RP) などが、認可サーバーの情報を得るためのメタデータが定義されています。
具体的には [OpenID Connect Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) [RFC 8414 OAuth 2.0 Authorization Server Metadata](https://datatracker.ietf.org/doc/html/rfc8414) があります。

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

### OpenID Connect Discovery

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` の呼び出し例は以下の通りです。

```sh theme={null}
curl --request GET \
  --url 'https://jp.authlete.com/api/<serviceId>/service/configuration?pretty=true' \
  --header 'authorization: Bearer <serviceAccessToken>' \
  --header 'content-type: application/json'
```

応答はメタデータとなる JSON の文字列がそのまま返却されます。

```json theme={null}
{
  "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 の設定](https://kb.authlete.com/ja/s/operations/a/service-settings) をご確認ください。

## 公開項目の取捨選択について

`/api/service/configuration` API で返却される情報は認可サーバー側にて取捨選択いただけます。例えば `id_token_signing_alg_values_supported` は Authlete がサポートする複数のアルゴリズムが応答されますが、認可サーバーが想定する値に上書きして公開するといった運用をいただけます。

### JSON Patch による Authlete 応答のカスタマイズ

Authlete では、`/api/service/configuration` API の応答を [RFC 6902 JSON Patch](https://datatracker.ietf.org/doc/html/rfc6902) に基づいてカスタマイズできます。

* **例：`id_token_signing_alg_values_supported` を `["RS256"]` のみに制限する**

```bash theme={null}
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 を独自のロジックでカスタマイズすることも出来ます。
