クライアントアプリケーションでのベアラートークンの使用
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このトピックでは、ベアラー トークン認証とSitecore Identityサーバーを使用して、MVCクライアントからAPIに安全にアクセスする方法について説明します。
ベアラートークン認証には、次の3つのことが含まれます。
-
Sitecore Identity (SI) サーバー。SIサーバは、デフォルトでJWT(JSON Web Token)形式でアクセストークンを発行します。今日、関連するすべてのプラットフォームは、JWTトークンの検証をサポートしています。 accessトークンとbearerトークンは同じものと考えることができます。
-
APIアプリケーション。
-
MVCクライアント アプリケーション。アプリケーションはSIサーバーにアクセス トークンをリクエストし、それを使用してAPIにアクセスします。
このトピックで説明する手順では、次の前提に基づく例を使用します。
-
SIサーバーはhttps://localhost:44356/で実行されます。例を使用する場合は、これを実際のURLに変更してください。
-
MVCクライアントはIDとしてMvcClientを持ち、SIサーバー上で次のように構成されます。
このトピックでは、次の方法について説明します。
APIの保護
このセクションでは、SIサーバーとベアラー トークン認証を使用してAPIを保護する基本的なシナリオの概要を説明します。ASP.NET CoreベースのAPIを保護するには、DIでJWTベアラー認証ハンドラーを構成し、認証ミドルウェアをパイプラインに追加するだけです。
APIを保護するには、次のようにします。
-
ASP.NET Core Web APIテンプレートを使用してVisual Studioで新しいプロジェクトを作成し、起動プロファイルでアプリケーションのURLを構成します。ここで使用する例では、URLとしてhttp://localhost:55600/ を使用してAPIを構成することを前提としています。このURLは、独自のソリューションで実際に使用するURLに置き換えます。
-
パッケージ参照をプロジェクトに追加します。
-
Startupクラスを設定します。
AddAuthentication方式では、認証サービスが追加され、Bearerがデフォルトのスキームとして設定されます。AddJwtBearerメソッドは、SIサーバーアクセストークン検証ハンドラを追加して、認証サービスがそれを使用できるようにします。UseAuthenticationメソッドは、認証ミドルウェアをパイプラインに追加して、ホストへの呼び出しごとに認証が自動的に実行されるようにします。
-
新しいコントローラーをAPIプロジェクトに追加します。
コントローラー(http://localhost:55600/identity)に移動すると、401ステータスコードが返されます。これは、APIに資格情報が必要であり、SIサーバーによって保護されていることを示しています。
MVCクライアントを構成する
保護されたAPIを使用するようにMVCクライアントを設定するには、次のようにします。
-
起動プロファイルでアプリケーションのURLを設定します。次の例では、URLとしてhttp://localhost:54567/ を使用してMVCクライアントを構成したことを前提としています。このURLは、SIサーバー クライアント構成のAllowedCorsOriginsGroup1ノードにある独自のソリューションで実際に使用するURLに置き換えます。
-
パッケージ参照をプロジェクトに追加します。
-
MVCアプリケーションのStartupクラスのConfigureServicesメソッドで、CookieとOpenID Connect認証のサポートを追加します。
AddAuthentication方式では、認証サービスが追加されます。Cookieは、CookiesがCookieとして指定されるため、ユーザーを認証する主要な方法ですDefaultScheme。DefaultChallengeSchemeはoidcとして指定されているため、ユーザーがログインするときには、OpenID Connectスキームを使用する必要があります。
AddCookieメソッドは、Cookieを処理できるハンドラーを追加します。
AddOpenIdConnectメソッドは、OpenID Connectプロトコルを実行するハンドラーを構成します。Authorityプロパティは、SIサーバーが信頼されていることを指定します。このクライアントは、ClientIdプロパティで識別できます。SignInSchemeメソッドは、OpenID Connectプロトコルが完了すると、Cookieハンドラを使用してCookieを発行します。SaveTokensメソッドは、SIサーバーからのトークンをCookieに保持します(後で必要になります)。ResponseTypeプロパティをcode tokenとして指定します (これは実質的にハイブリッド フローを使用することを意味します)。
-
ConfigureメソッドでUseAuthenticationメソッドを呼び出して、各リクエストに対して認証サービスが実行されることを確認します。パイプラインでMVCの前に認証ミドルウェアを追加する必要があります。
-
認証ハンドシェイクをトリガーするには、HomeコントローラーにAuthorize属性を追加します。
ブラウザでこのコントローラに移動すると、SIサーバへのリダイレクトが試行され、認証が成功すると、次のページが表示されます。
-
次のアクションをHomeコントローラーに追加して、ベアラー トークンを使用してAPIを呼び出します。
-
ベアラー (アクセス) トークンは、GetTokenAsyncメソッドを使用してHttpContextから取得するには、access_token引数を渡します。これは、リクエストヘッダーにアクセストークンを追加する方法です。
http://localhost:54567/callapi URLに移動します。答えは次のようになります。
呼び出し元のURL (http://localhost:55600/identity) を変更して、Sitecoreアイテム サービスなどの別のAPIを呼び出すことができます。
しばらくすると (SIサーバー上のクライアント構成でAccessTokenLifetimeInSecondsパラメーターとして指定)、次のような結果が得られます。
これは、アクセストークンの有効期限が切れているため、新しいトークンを取得する必要があることを意味します。次のセクションでは、これを行う方法について説明します。
Exchangeの更新トークンとアクセス トークン
SIサーバーには、プログラムでトークンを要求するために使用するトークン エンドポイントがあります。サーバーは、OpenID ConnectおよびOAuth 2.0トークン要求パラメーターのサブセットをサポートします。OpenIDのドキュメンテーション には、完全なリストがあります。
トークンを要求するには:
-
ホームコントローラーに次のアクションを追加します。
TokenClientクラスのインスタンスを使用して、SIサーバーから新しいトークンを要求します。この要求の前に、有効な更新トークンが必要です。リクエストが成功すると(RequestRefreshTokenAsync)、この更新トークンは無効になり、Cookie内の更新トークンとアクセストークンを新しいトークンで更新する必要があります。
-
AuthenticateAsyncメソッドを呼び出して、認証プロパティを取得します。UpdateTokenValueメソッドは、トークンとプロパティの有効期限のタイムスタンプを更新し、最後にSignInAsyncメソッドが認証Cookieを保存します。
これで、GetTokenAsyncメソッドは更新されたアクセストークンまたは更新トークンを返します。