场景: Web应用程序和Web API都需要从服务器端进行身份验证和保护。使用Azure AD对Web应用程序和Web API进行基于令牌的身份验证B2C
要求: Web应用程序正在为浏览器提供内容,浏览器应直接调用Web API(即Browser to API)。
问题: 是否可以使用标记验证Web应用程序和API?
任何示例代码或清晰的方向将不胜感激。
通常Web应用程序使用cookie认证和API使用tokens.There认证可here一些样本项目,但他们要么是浏览器API(SPA基于令牌)或服务器端Web应用程序调用从服务器的API服务器。
UPDATE 1
应用被保存TokenValidationParameters
和该应用控制器内使用bootstrapContext.Token
抓住服务器到服务器的通信。
根据@dstrockis,我试图在验证结束后不久(在应用程序控制器内)从Web App抓取id_token
。
我在Startup
类中使用SecurityTokenValidated
调用者OpenIdConnectAuthenticationOptions.Notifications
。 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);
}
更新2
相反的SecurityTokenValidated
,我想AuthorizationCodeReceived
和它没有得到被调用。正如这里所讨论的,我的redirect url does have an ending slash也是如此。
任何想法?
你能解释一下多一点吗?此方法何时执行?你如何实施解决方案? – zuckerthoben
所有这些都在Web应用程序(而不是API)的App_Start目录中的Startup.Auth.cs的Startup类中完成。您需要首先对Web App和API进行身份验证。原始帖子中有一个链接,用于示例项目。 – Kaf