2016-02-26 117 views
0

我想授权用户与从请求标头发送的不记名令牌。 我在资源服务器的启动文件中添加了这段代码。Asp.net核心授权用户政策

services.AddAuthorization(auth => 
{ 
    auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()       
    .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
    .RequireAuthenticatedUser().Build()); 
}); 

这是我在控制器中的方法。

[Authorize("Bearer")] 
[HttpGet] 
[Route("list")] 
public IEnumerable<Products> List() 
{ 
    string Authorization = Request.Headers["Authorization"]; 
} 

应用显示我401错误,即使我有令牌

我在头请求发送该令牌

授权擅自:承载“XYZ”

+0

你有没有尝试过不使用政策?如果它的工作原理没有,你可能会错过JWT&Policy配置 –

+0

不,它不起作用。 我忘了提及我有两个项目1是资源服务器,第二个是auth服务器,授权属性在Auth服务器中工作,但在资源服务器中不工作,上面的代码在资源服务器中。 – James

回答

0

要与承载令牌工作您必须在您的配置方法中添加以下代码

public void Configure(IApplicationBuilder app) { 
    app.UseJwtBearerAuthentication(options => { 
     options.AutomaticAuthenticate = true; 
     options.AutomaticChallenge = true; 
     options.Audience = "OAuth:Audience"; 
     options.Authority = "OAuth:Authority"; 
     options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
      metadataAddress: options.Authority + ".well-known/openid-configuration", 
      configRetriever: new OpenIdConnectConfigurationRetriever(), 
      docRetriever: new HttpDocumentRetriever() { RequireHttps = false }); 
    }); 
} 

您还需要一个中间件来处理授权过程。 看看AspNet.Security.OpenIdConnect.ServerOpenIddict

+0

我经历了所说的文章。 使用两个项目时需要中间件吗? 其中一个是资源项目,其他是Auth项目 – James

+0

您必须仅在您的Auth项目中使用中间件 –