OAuthサーバーへようこそ

このサーバーはOAuth 2.0を実装しています:

はじめに

このOAuthサーバーを使用するには、お問い合わせの上、OAuthアプリケーションを申請してください。

作成中のアプリケーションの簡単な説明と、以下の詳細をご提供ください。不明な点があっても問題ありません。ご提供いただいた説明をもとにこちらでサポートいたします。

  1. クライアントタイプ:パブリックか、それとも機密か?
  2. グラントタイプ:認可、クライアント資格情報、またはデバイス?
  3. 許可されたリダイレクトURI。
  4. アクセスしたいリソース。 APIドキュメントおよびGraphQL APIをご覧ください。

例(認可)

1. PKCEコードベリファイアとチャレンジを生成

// Generate a code verifier (random string)
const codeVerifier = crypto.randomUUID().replace(/-/g, '');

// Create a code challenge (SHA-256 hash of verifier)
const encoder = new TextEncoder();
const data = encoder.encode(codeVerifier);
const digest = await crypto.subtle.digest('SHA-256', data);
const codeChallenge = btoa(String.fromCharCode(...new Uint8Array(digest))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

2. 認可をリクエスト

GET /authorize/?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&code_challenge=CODE_CHALLENGE&code_challenge_method=S256

3. 認可コードをアクセストークンと交換

POST /token/
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTH_CODE&redirect_uri=YOUR_REDIRECT_URI&client_id=YOUR_CLIENT_ID&code_verifier=YOUR_CODE_VERIFIER

4. 保護されたリソースへのアクセス

GET /resource/
Authorization: YOUR_ACCESS_TOKEN

例(クライアント認証情報)

1. 認証情報を交換してアクセストークンを取得

POST /token/
Authorization: Basic BASE64_ENCODED(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials

2. 保護されたリソースへのアクセス

GET /resource/
Authorization: YOUR_ACCESS_TOKEN

例(デバイス)

1. デバイスを承認する

POST /device-authorization/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID

デバイスは応答を使用して、user_codeverification_uriをエンドユーザーに表示または伝達する必要があります。画面付きのデバイスはこの情報を視覚的に表示でき、画面のないデバイスは音声やBluetoothなどの代替手段を使用できます。

         +-----------------------------------------------+
         |                                               |
         |  Using a browser on another device, visit:    |
         |  https://auth.example.com/device              |
         |                                               |
         |  And enter the code:                          |
         |  ETE39050                                     |
         |                                               |
         +-----------------------------------------------+

ユーザーはverification_uriにアクセスして認証を行い、user_codeを入力してデバイスを承認します。

2. デバイスコードをアクセストークンと交換

ユーザーが承認を行っている間、デバイスは定期的に(interval秒で指定されたレートで)アクセストークンの取得を試みる必要があります:

POST /token/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID&device_code=DEVICE_CODE&grant_type=urn:ietf:params:oauth:grant-type:device_code

3. 保護されたリソースへのアクセス

GET /resource/
Authorization: YOUR_ACCESS_TOKEN

例(トークン交換)

RFC 8693 委任セマンティクスがサポートされています。つまり、以下の通り、クライアント資格情報トークンをAuthorizationヘッダーとactor_tokenの両方で使用します。

1. 以下で説明するように、クライアント資格情報アプリのアクセストークンを取得します: 例(クライアント認証情報).

2. EXTERNAL_IDP_USER_ACCESS_TOKENが外部IdPによって発行されていると仮定し、トークン交換呼び出しを実行します:

POST /token
Authorization: YOUR_CLIENT_CREDENTIALS_ACCESS_TOKEN
Content-Type: application/x-www-form-urlencoded

grant_type="urn:ietf:params:oauth:grant-type:token-exchange"&
actor_token_type="urn:ietf:params:oauth:token-type:access_token"&
actor_token=YOUR_CLIENT_CREDENTIALS_ACCESS_TOKEN&
subject_token_type="urn:ietf:params:oauth:token-type:access_token"&
subject_token=EXTERNAL_IDP_USER_ACCESS_TOKEN

3. 保護されたリソースへのアクセス

GET /resource/
Authorization: YOUR_ACCESS_TOKEN

リソース