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. 認可をリクエスト

ユーザーを以下のURLにリダイレクトしてください。:
https://auth.oejp-kraken.energy/authorize/?
  client_id=YOUR_CLIENT_ID&
  response_type=code&
  redirect_uri=YOUR_REDIRECT_URI&
  code_challenge=CODE_CHALLENGE&
  code_challenge_method=S256
このURLはブラウザの住所バーに表示されるため、シークレットは決して含めないでください。
このステップで、ユーザーはアクセスを承認するか拒否するかを選択します。ユーザーが承認すると、ブラウザはYOUR_REDIRECT_URIにリダイレクトされ、URLクエリパラメータにAUTH_CODEが含まれます。

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

YOUR_REDIRECT_URIのハンドラーは、以下の呼び出しを実行する必要があります。
POST https://auth.oejp-kraken.energy/token/
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_CLIENT_ID&
client_secret=CLIENT_SECRET& # パブリッククライアントの場合は省略してください
grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=YOUR_REDIRECT_URI&
code_verifier=YOUR_CODE_VERIFIER
フロントエンドからこの呼び出しを行う場合は、OAuthアプリケーションをパブリックに設定し、リクエストからシークレットを除外してください。
バックエンドからこの呼び出しを行う場合は、OAuthアプリケーションをコンフィデンシャルに設定し、リクエストにシークレットを含めてください。

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

GET https://api.oejp-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

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

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

POST https://auth.oejp-kraken.energy/token/
Authorization: Basic BASE64_ENCODED(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials

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

GET https://api.oejp-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

例(デバイス)

1. デバイスを承認する

POST https://auth.oejp-kraken.energy/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 https://auth.oejp-kraken.energy/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 https://api.oejp-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

例(トークン交換)

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

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

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

POST https://auth.oejp-kraken.energy/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 https://api.oejp-kraken.energy/resource/
Authorization: YOUR_ACCESS_TOKEN

リソース