如何在同时使用两个OWIN认证选项时获得正确的日志?
问题描述:
我的网页前台有接受两种令牌的apis。为了进行身份验证,我设置了应用程序的ConfigAuth方法,如下所示。然后在控制器层,对于每个API,我使用AuthorizationFileterAttribtue来确保正确的令牌是预期的。这工作。但是,在登录时遇到问题。每当令牌到达时,下面的身份验证都会运行。如果任何一个认证通过,Thread.CurrentPrincipal.Identity.IsAuthenticated设置为true。例如,如果令牌对WindowsAzureActiveDirectoryBearerAuthenticationOptions有效,则JwtBearerAuthenticationOptions将失败。所以无论如何,我总是得到一个失败的日志。你知道我可以如何处理这种情况,并确保在令牌有效时不写入失败日志?如何在同时使用两个OWIN认证选项时获得正确的日志?
app.UseAadBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ...,
TokenValidationParameters = new TokenValidationParameters
{
...
}
});
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
...
},
});
答
一种解决方案是增加一个中间件认证供应商在完成后,并检查用户进行身份验证有
app.UseAadBearerAuthentication(...);
app.UseJwtBearerAuthentication(...);
app.Use(async (env, next) =>
{
if (env.Authentication.User.Identity.IsAuthenticated)
{
// Add log
}
await next();
});