场景: Web 应用程序和 Web API 都需要从服务器端进行身份验证和保护。
要求: Web 应用程序为浏览器提供内容,浏览器应直接调用Web API(即浏览器到API)。
问题: 是否可以同时使用令牌对 Web APP 和 API 进行身份验证?
任何示例代码或明确的方向将不胜感激。
通常,Web 应用程序使用 cookie 进行身份验证,API 使用令牌进行身份验证。这里有一些示例项目,但它们是浏览器到 API(基于 SPA 令牌)或服务器端 Web 应用程序从服务器到服务器调用 API。
更新 1
应用程序正在保存TokenValidationParameters
并bootstrapContext.Token
在应用程序控制器中使用以获取服务器到服务器的通信。
根据@dstrockis,我正试图在id_token
验证结束后不久从 Web 应用程序中获取(不在应用程序控制器内)。
我在课堂上使用SecurityTokenValidated
调用者。接收一个类型的参数,但我不知道在哪里可以找到它。方法如下。OpenIdConnectAuthenticationOptions.Notifications
Startup
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
,它根本没有被调用。正如这里所讨论的,我的重定向 url 也有一个结尾斜杠。
有任何想法吗?