PKCE フローを使用した、組織のカスタム OAuth 2 アプリケーションの設定と使用
PKCE は、モバイルアプリなどの動的に更新するアプリケーションでうまく機能するセキュアな認証フローですが、すべての OAuth2 クライアントで役に立ちます。PKCE では、静的なクライアントシークレットではなく、動的に生成された文字列を使用するので、クライアントシークレットの漏洩のリスクを排除できます。
PKCE の概要
PKCE フローには、以下の手順が含まれます。この節の手順は、情報についてのみ説明しています。これらの手順を実行するには、この記事の他の節を参照してください。
-
クライアントは、
S256暗号化を使用してcode_verifierを変換することにより、code_challengeを作成します。 -
クライアントは、生成された
code_challengeとともに、ブラウザーを OAuth2 サインインページに移動します。OAuth2 が認証要求を受け入れられるように、アプリ(クライアント)を登録する必要があります。登録後、アプリはブラウザーを OAuth2 にリダイレクトできます。 -
OAuth2 認証サーバーは、認証プロンプトをユーザーにリダイレクトします。
-
ユーザーは、設定されたログインオプションの 1 つを使用して認証すると、OAuth2 がアプリケーションに与える権限を一覧表示した同意ページが表示される場合があります。
-
OAuth2 は、
authorization codeを使用してアプリケーションにリダイレクトします。 -
アプリケーションは、
code_verifierと併せて、このコードを OAuth2 に送信します。 -
OAuth2 認可サーバーは、最初の認可リクエストからの
code_challenge_methodを使用してcode_verifierを変換し、その結果をcode_challengeと照合します。両方の文字列の値が一致する場合、サーバーは、リクエストが同じクライアントから送信されたことを検証し、access tokenを発行します。 -
OAuth2 は
access token、およびオプションとしてrefresh tokenを返します。 -
これで、アプリケーションはこれらのトークンを使用して、ユーザーに代わって API などのリソースサーバーを呼び出すことができます。
-
リソースサーバーは、リクエストに応答する前にトークンを検証します。
アプリケーションの設定
認証を実装する前に、Workfront からアプリの統合を作成して、アプリを OAuth2 に登録する必要があります。
OAuth2 アプリケーションの作成手順については、Workfront 統合用の OAuth2 アプリケーションの作成にある、PKCE を使用した OAuth2 単一ページ web アプリケーションの作成を参照してください。
コード交換用のプルーフキーの作成
標準の認可コードフローと同様に、アプリはユーザーのブラウザーを認可サーバーの /authorize エンドポイントにリダイレクトすることから開始します。ただし、この場合はコードチャレンジも渡す必要があります。
最初の手順は、コードベリファイアおよびコードチャレンジを生成することです。
コードベリファイアおよびコードチャレンジを生成するには、クライアントアプリにコードを追加する必要があります。
PKCE ジェネレーターコードは、次のような出力を作成します。
| code language-none |
|---|
|
アプリは後で使用できるように code_verifier を保存し、code_challenge を認可リクエストとともに認可サーバーの /authorize URL に送信します。
認証コードのリクエスト
デフォルトのカスタム認証サーバーを使用している場合、リクエスト URL は以下のようになります。
| code language-none |
|---|
|
渡されるパラメーターに注意してください。
-
client_idは、アプリケーションの設定時にで作成した OAuth2 アプリケーションのクライアント ID と一致します。手順については、Workfront 統合用の OAuth2 アプリケーションの作成にある、PKCE を使用した OAuth2 単一ページ web アプリケーションの作成を参照してください。
-
アプリケーションが認証コード付与タイプを使用するので、
response_typeはcodeです。 -
redirect_uriは、codeと共にユーザーエージェントが誘導されるコールバックの場所です。 これは、OAuth2 アプリケーションの作成時に指定したリダイレクト URL の 1 つと一致する必要があります。 -
チャレンジの生成に使用されるハッシュ方式は
code_challenge_methodです。この方式は、PKCE を使用するWorkfront Oauth2 アプリケーションで常にS256用されます。 -
code_challengeは、PKCE に使用されるコードチャレンジです。
トークンのコードの交換
認証コードをアクセストークンと交換するには、認証コードを code_verifier とともに認証サーバーの /token エンドポイントに渡します。
| code language-none |
|---|
|
渡されるパラメーターに注意してください。
-
grant_typeはauthorization_codeです。これは、アプリが認証コード付与タイプを使用するためです。 -
redirect_uriは、認証コードの取得に使用された URI と一致する必要があります。 -
codeは、/authorize エンドポイントから受け取った認証コードです。 -
code_verifierは、 コード交換用の証明キーを作成する でアプリが生成した PKCE コード検証ツールです。 -
client_idはクライアントを識別し、OAuth2 で事前に登録されている値と一致する必要があります。
コードが引き続き有効で、コード検証が一致する場合は、アプリケーションがアクセストークンを受け取ります。
| code language-none |
|---|
|
アクセストークンの検証
アプリケーションがアクセストークンを使用してリクエストを渡す場合、リソースサーバーはそのリクエストを検証する必要があります。
次のような API 呼び出しを使用して、アクセストークンを検証できます。
| code language-none |
|---|
|
更新トークンのリクエスト
更新トークンをリクエストするには、次のように、API に対して POST 呼び出しを実行します。
| code language-none |
|---|
|