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