を使用したWebアプリケーションとWeb APIのトークンベース認証シナリオ: WebアプリケーションとWeb APIの両方を認証し、サーバー側から保護する必要があります。Azure AD B2C
要件: Webアプリケーションは、ブラウザのためのコンテンツを提供していると、ブラウザは、(APIへつまりブラウザ)直接のWeb APIを呼び出す必要があります。
質問: トークンを使用してWeb APPとAPIの両方を認証できますか。
サンプルコードまたは明確な指示は高く評価されます。
通常のWebアプリケーションは、クッキーとAPIを使用して認証されtokens.Thereを使用して認証されhere利用できるいくつかのサンプルプロジェクトですが、彼らは、サーバーからのAPIを呼び出すいずれかのAPIへのブラウザ(SPAトークンベース)、またはサーバー側のWebアプリケーションですサーバ。
UPDATE 1
アプリTokenValidationParameters
を節約し、サーバへの通信サーバのためつかむためにアプリコントローラ内bootstrapContext.Token
使用されます。
@dstrockisによると、私はid_token
をWebアプリケーションから取得しようとしています。検証の終了後すぐに(アプリケーション制御装置内ではありません)。
私は、Startup
クラスの中でにSecurityTokenValidated
呼び出し者を使用しています。 SecurityTokenValidated
はSecurityTokenValidatedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions>
タイプのパラメータを受け取りますが、id_token
がどこにあるかはわかりません。メソッドは以下の通りです。
private OpenIdConnectAuthenticationOptions CreateOptionsFromPolicy(string policy)
{
return new OpenIdConnectAuthenticationOptions
{
// For each policy, give OWIN the policy-specific metadata address, and
// set the authentication type to the id of the policy
MetadataAddress = String.Format(aadInstance, tenant, policy),
AuthenticationType = policy,
// These are standard OpenID Connect parameters, with values pulled from web.config
ClientId = clientId,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
//NEW METHOD INVOKE ************************************
//******************************************************
SecurityTokenValidated = OnSecurityTokenValidated
//******************************************************
},
Scope = "openid",
ResponseType = "id_token",
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
SaveSigninToken = true
},
};
}
//NEW METHOD ************************************
private Task OnSecurityTokenValidated(
SecurityTokenValidatedNotification<OpenIdConnectMessage,
OpenIdConnectAuthenticationOptions> arg)
{
//QUESTION ********************************************************
//How to find the just saved id_token using incoming parameter, arg
//*****************************************************************
return Task.FromResult(0);
}
UPDATE 2
代わりのSecurityTokenValidated
、私はAuthorizationCodeReceived
を試してみましたが、それがすべてで呼び出さなっていません。ここで説明したように、私のredirect url does have an ending slashも同様です。
すべてのアイデア?
あなたはもう少し説明していただけますか?このメソッドはいつ実行されますか?どのようにソリューションを実装していますか? – zuckerthoben
これらはすべて、Webアプリケーション(APIではなく)内のApp_StartディレクトリにあるStartup.Auth.csのStartupクラス内で実行されます。まず、Web AppとAPIの両方の認証を並べ替える必要があります。サンプルプロジェクトのために、元の投稿にリンクがあります。 – Kaf