如何在同时使用两个OWIN authenticationOptions时获取正确的日志?

时间:2017-09-11 17:57:36

标签: c# owin

我的网络前端有接受两种令牌的api。为了进行身份验证,我设置了应用程序的ConfigAuth方法,如下所示。然后在控制器层,对于每个api,我使用AuthorizationFileterAttribtue来确保期望权限令牌。这有效。但是,在进行日志记录时会出现问题。每当令牌到达时,下面的两个身份验证都将运行。如果两个认证中的任何一个通过,则Thread.CurrentPrincipal.Identity.IsAuthenticated设置为true。例如,如果令牌对WindowsAzureActiveDirectoryBearerAuthenticationOptions有效,则JwtBearerAuthenticationOptions将失败。所以无论如何,我总是得到一个失败的日志。你知道我如何处理这种情况并确保在令牌有效时没有写入失败日志吗?

        app.UseAadBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ...,
                TokenValidationParameters = new TokenValidationParameters
                {
                    ...
                }
            });

        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                TokenValidationParameters = new TokenValidationParameters
                {
                    ...
                },
            });

1 个答案:

答案 0 :(得分:0)

一种解决方案是在身份验证提供程序完成后添加中间件并检查用户是否在那里进行了身份验证

app.UseAadBearerAuthentication(...);
app.UseJwtBearerAuthentication(...);
app.Use(async (env, next) =>
{
    if (env.Authentication.User.Identity.IsAuthenticated)
    {
        // Add log
    }
    await next();
});