> ## 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.

# リクエストオブジェクトの利用

> セキュリティ強化のためにリクエストオブジェクトを用いた認可リクエストをサポートするよう Authlete を設定する手順を説明します。

<Info>
  For **Authlete 2.x** documentation, see [2.x version](/ja/v2/configuration-reference/endpoints/using-request-objects).
</Info>

## はじめに

[リクエストオブジェクト](https://openid.net/specs/openid-connect-core-1_0.html#JWTRequests)
は、一連のリクエストパラメーターを [Claims](https://tools.ietf.org/html/rfc7519#section-4) として含む JWT です。

リクエストオブジェクトは、改ざんや意図しないデータ漏洩を防ぐために、署名を付けたり暗号化したりすることができます。また、値ではなく参照によって渡すこともでき、これにより（ブラウザーのリダイレクトを介した）認可リクエストのサイズを小さくできます。

本記事では、リクエストオブジェクトを用いた認可リクエストに Authlete が対応するための設定手順を説明します。

## 設定

Authlete サービスがリクエストオブジェクトを用いた認可リクエストを処理できるようにするには、サービスがオブジェクトの署名を検証できるよう、次の 2 つのプロパティを設定する必要があります。

1. リクエストオブジェクトに使用される署名アルゴリズム
2. 指定した署名アルゴリズムに対応する公開鍵

必要に応じて、クライアントに対して次のことを許可するように Authlete を設定することもできます。

* リクエストオブジェクトの暗号化
* 「request\_uri」の利用

これらの設定は、
クライアントごとに指定します。

<img src="https://mintcdn.com/authlete/EJDZNZMvOu_9CJHJ/configuration-reference/tokens-and-claims/request-objects.png?fit=max&auto=format&n=EJDZNZMvOu_9CJHJ&q=85&s=5008bb130230d7e6a2459d81c82f8f87" alt="リクエストオブジェクト" width="959" height="542" data-path="configuration-reference/tokens-and-claims/request-objects.png" />

*リクエストオブジェクトの処理*

## 1. 署名アルゴリズムの指定

クライアント設定において、左ペインの「エンドポイント」→「認可」を選択し、次に右ペインの「リクエストオブジェクト」タブを選択します。そして「リクエストオブジェクト」セクションにおいて、「署名アルゴリズムを選択」をクリックします。次の例は「ES256」を選択した場合の結果を示しています。<img src="https://mintcdn.com/authlete/TIo7ciy5bMLP5_Rt/ja/configuration-reference/endpoints/request-objects_ja_1.png?fit=max&auto=format&n=TIo7ciy5bMLP5_Rt&q=85&s=7a31cae27cd7675f07a5de9c31b82ca0" alt="リクエストオブジェクト_1" width="1440" height="1546" data-path="ja/configuration-reference/endpoints/request-objects_ja_1.png" />

*「リクエストオブジェクト」の署名アルゴリズム*

## 2. 公開鍵の登録

クライアント設定において、左ペインの「キーマネジメント」→「JWK セット」を選択します。そして、「JWKセットの内容」セクションに JWK 形式の公開鍵を登録するか、「JWKセットエンドポイントURI」に URI を指定します。次の例は ES256 の公開鍵を登録した場合の結果を示しています。<img src="https://mintcdn.com/authlete/TIo7ciy5bMLP5_Rt/ja/configuration-reference/endpoints/request-objects_ja_2.png?fit=max&auto=format&n=TIo7ciy5bMLP5_Rt&q=85&s=255d5aa182ea65acec2485d0a14a7268" alt="リクエストオブジェクト_2" width="1440" height="925" data-path="ja/configuration-reference/endpoints/request-objects_ja_2.png" />

*JWKセットの内容*

上記の設定により、設定済みのクライアントがリクエストオブジェクトを含む認可リクエストを送信すると、Authlete サービスは署名アルゴリズムによって決定される公開鍵を使用してオブジェクトの署名を検証し、後続の処理を進めます。

## オプション: 暗号化アルゴリズムの指定

暗号化されたリクエストオブジェクトを利用したい場合は、「リクエストオブジェクト」タブの「リクエストオブジェクト」セクションにある「Encryption Algorithm」と「Encryption Encoding Algorithm」に、適切な値を指定します。\\

<img src="https://mintcdn.com/authlete/TIo7ciy5bMLP5_Rt/ja/configuration-reference/endpoints/request-objects_ja_3.png?fit=max&auto=format&n=TIo7ciy5bMLP5_Rt&q=85&s=97c4e8e6b2d4d6e60c8f81ca0a4af81d" alt="リクエストオブジェクト_3" width="1440" height="1546" data-path="ja/configuration-reference/endpoints/request-objects_ja_3.png" />

## オプション: request\_uri の値の登録

クライアントが request（値渡し）ではなく request\_uri（参照渡し）で認可リクエストを送信できるように、「リクエストオブジェクト」タブの「リクエストURI」セクションに適切な値を追加します。<img src="https://mintcdn.com/authlete/TIo7ciy5bMLP5_Rt/ja/configuration-reference/endpoints/request-objects_ja_4.png?fit=max&auto=format&n=TIo7ciy5bMLP5_Rt&q=85&s=3619d3976c5a437ca1984fc645e5627b" alt="リクエストオブジェクト_4" width="1440" height="1628" data-path="ja/configuration-reference/endpoints/request-objects_ja_4.png" />

***

## 例

API のリクエスト / レスポンスの例は次のとおりです。（読みやすくするために折り返しています）

## リクエスト

### クライアント: リクエストオブジェクトの作成

クライアントが、次のペイロードを含む署名付き JWT（リクエストオブジェクト）を作成するものとします。

```
{
   "exp": 1597130002,
   "iss": "17201083166161",
   "aud": "https://as.example.com",
   "scope": "openid profile",
   "response_type": "code",
   "client_id": "17201083166161",
   "redirect_uri": "https://client.example.org/cb/example.com",
   "nonce": "lvzxcjkb78643ki5kigsysigyb",
   "foo": "bar"
}
```

生成される JWT は次のようになります。

```
eyJhbGciOiJFUzI1NiJ9.
ewogICJleHAiOiAxNTk3MTMwMDAyLAogICJpc3MiOiAiMTcyMDE
wODMxNjYxNjEiLAogICJhdWQiOiAiaHR0cHM6Ly9hcy5leGFtcG
xlLmNvbSIsCiAgInNjb3BlIjogIm9wZW5pZCBwcm9maWxlIiwKI
CAicmVzcG9uc2VfdHlwZSI6ICJjb2RlIiwKICAiY2xpZW50X2lk
IjogIjE3MjAxMDgzMTY2MTYxIiwKICAicmVkaXJlY3RfdXJpIjo
gImh0dHBzOi8vY2xpZW50LmV4YW1wbGUub3JnL2NiL2V4YW1wbG
UuY29tIiwKICAibm9uY2UiOiAibHZ6eGNqa2I3ODY0M2tpNWtpZ
3N5c2lneWIiLAogICJmb28iOiAiYmFyIgp9.
JnuCpEL1mRKPBUfXIO5mPtusY2lnz1w6oS6QQdYai7VUXUxfPA7
elMIWdsExc7tsSovTTAMK8mSxz9COAciY-Q
```

### クライアント: 認可リクエストの送信

次に、クライアントは上記のリクエストオブジェクトを用いて認可リクエストを組み立てます。リクエストには、値（request）または参照（request\_uri）のいずれかとしてオブジェクトが含まれます。

* オブジェクトを値で渡す場合

```
GET /cb/example.com
 &client_id=...
 &scope=openid
 &response_type=code
 &request=eyJhbGciOiJFUzI1NiJ9.
   ewogICJleHAiOiAxNTk3MTMwMDAyLAogICJpc3MiOiAiMTcyMDE
   wODMxNjYxNjEiLAogICJhdWQiOiAiaHR0cHM6Ly9hcy5leGFtcG
   xlLmNvbSIsCiAgInNjb3BlIjogIm9wZW5pZCBwcm9maWxlIiwKI
   CAicmVzcG9uc2VfdHlwZSI6ICJjb2RlIiwKICAiY2xpZW50X2lk
   IjogIjE3MjAxMDgzMTY2MTYxIiwKICAicmVkaXJlY3RfdXJpIjo
   gImh0dHBzOi8vY2xpZW50LmV4YW1wbGUub3JnL2NiL2V4YW1wbG
   UuY29tIiwKICAibm9uY2UiOiAibHZ6eGNqa2I3ODY0M2tpNWtpZ
   3N5c2lneWIiLAogICJmb28iOiAiYmFyIgp9.
   JnuCpEL1mRKPBUfXIO5mPtusY2lnz1w6oS6QQdYai7VUXUxfPA7
   elMIWdsExc7tsSovTTAMK8mSxz9COAciY-Q HTTP/1.1
Host: as.example.com
...
```

* オブジェクトを参照で渡す場合

クライアントは、リクエストオブジェクトを request\_uri の場所（例: [https://client.example.org/request.jwt）に配置し、Authlete](https://client.example.org/request.jwt）に配置し、Authlete) からアクセスできるようにする必要があります。

```
GET /cb/example.com
&client_id=...
&scope=openid
&response_type=code
&request_uri=https://client.example.org/request.jwt
HTTP/1.1
Host: as.example.com
...
```

### 認可サーバー: Authlete API へのリクエスト送信

認可リクエストを受け取ると、認可サーバーは Authlete の [/auth/authorization API](/api-reference/authorization-endpoint/process-authorization-request)
にリクエストを送信します。このリクエストには、クライアントからの認可リクエストが "parameters" の値として含まれます。

```
curl -s -X POST https://us.authlete.com/api/<Service ID e.g., 21653835348762>/auth/authorization
 -H 'Authorization: Bearer <Service Access Token>'
 -H 'Content-type: application/json'
 -d '{"parameters":
       "redirect_uri=https://client.example.org/cb/example.com
        &client_id=...
        &scope=openid
        &response_type=code
        &request=eyJhbGciOiJFUzI1NiJ9.
          ewogICJleHAiOiAxNTk3MTMwMDAyLAogICJpc3MiOiAiMTcyMDE
          wODMxNjYxNjEiLAogICJhdWQiOiAiaHR0cHM6Ly9hcy5leGFtcG
          xlLmNvbSIsCiAgInNjb3BlIjogIm9wZW5pZCBwcm9maWxlIiwKI
          CAicmVzcG9uc2VfdHlwZSI6ICJjb2RlIiwKICAiY2xpZW50X2lk
          IjogIjE3MjAxMDgzMTY2MTYxIiwKICAicmVkaXJlY3RfdXJpIjo
          gImh0dHBzOi8vY2xpZW50LmV4YW1wbGUub3JnL2NiL2V4YW1wbG
          UuY29tIiwKICAibm9uY2UiOiAibHZ6eGNqa2I3ODY0M2tpNWtpZ
          3N5c2lneWIiLAogICJmb28iOiAiYmFyIgp9.
          JnuCpEL1mRKPBUfXIO5mPtusY2lnz1w6oS6QQdYai7VUXUxfPA7
          elMIWdsExc7tsSovTTAMK8mSxz9COAciY-Q"}'
```

## レスポンス

Authlete が適切に設定されていれば、次のようなレスポンスが返されます。

```
{
  "resultCode": "A004001",
  "resultMessage":
    "[A004001] Authlete has successfully issued a ticket
     to the service (API Key = 21653835348762) for the
     authorization request from the client (ID = ...).
     [response_type=code, openid=true]",
  "requestObjectPayload":
    "{\"exp\":1597130002,
      \"iss\":\"17201083166161\",
      \"aud\":\"https://as.example.com\",
      \"scope\":\"openid profile\",
      \"response_type\":\"code\",
      \"client_id\":\"17201083166161\",
      \"redirect_uri\":
        \"https://client.example.org/cb/example.com\",
      \"nonce\":\"lvzxcjkb78643ki5kigsysigyb\",
      \"foo\":\"bar\"}",
  "ticket": "rja...GiE"
[...]
```

ペイロードの内容を含む "requestObjectPayload" というキーがある点に注目してください。認可サーバーはこれを後続の認可処理に活用できます。
