2016-08-18 59 views
0

我正在使用以下JWT中间件来授权具有有效JWT的所有控制器,并且它按预期工作。我需要在其中一个控制器上启用基于客户端证书的授权。我知道我可以创建一个新的中间件并将其插入验证客户端证书的owin管道中。asp.net web API中的每个控制器的Owin中间件

如何决定哪个控制器使用哪个中间件?据我所知,OWIN没有任何控制器的知识。请建议

public void ConfigureAuth(IAppBuilder app) 
    { 
     TextEncodings.Base64Url.Decode("IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw"); 

     var issuer = System.Configuration.ConfigurationManager.AppSettings["issuer"].ToString(); 
     var audience = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString(); 
     var secret = TextEncodings.Base64Url.Decode(System.Configuration.ConfigurationManager.AppSettings["ClientSecret"].ToString()); 
     // Api controllers with an [Authorize] attribute will be validated with JWT 
     app.UseJwtBearerAuthentication(
      new JwtBearerAuthenticationOptions 
      { 
       AuthenticationMode = AuthenticationMode.Active, 
       AllowedAudiences = new[] { audience }, 
       IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
       { 
        new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret), 

       }     
      }); 

    } 

回答

0

Owin“知道”哪个控制器要授权,因为它上面有[Authorize]标签。

你为什么不为其他系统做同样的事情?创建另一个标签,然后启动另一个认证系统?这是保持清洁系统工作的最简单方法。

你可能更多地使用owin源代码来获得一些灵感和准确的事情。