如何在同时使用两个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(); 
});