2016-08-31 33 views
2

我有一个可以工作的Asp.NET核心WebApi服务和一个可以从ASP.NET核心MVC应用程序调用的服务。该服务使用AutoRest生成的包装来调用。该服务目前没有安全层,而使用OAuth2保护网站。使用OAuth2保护和访问.NET核心WebApi服务

我已经添加了以下的服务:

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 

     services.AddMvc(); 

     // NEW Authorisation 
     services.AddAuthorization(options => 
     { 
      options.AddPolicy("ApiAccess", policy => policy.RequireClaim("email")); 
     }); 

    } 

我的控制器固定这样:

[Authorize(Policy = "ApiAccess")] 
public class StatusController : Controller 

不过,我得到一个“未授权”的例外,当我打电话AutoRest包装:

try 
     { 
      var service = new StatusAPI(new Uri("http://localhost:17237/")); 
      ViewData["State"] = service.ApiStatusGet(); 
     } 
     catch (Exception ex) 
     { 
      ViewData["State"] = new[] { new ServiceStatus { Name = "Health API", Message = "Is unreachable " + ex.Message } }; 
     } 

我不确定问题在于我需要一种方法来传递呼叫中的索赔包装或如果它在我的服务设置和它如何检测索赔。

+0

是否有认证的中间件或填写主要的电子邮件要求一些自定义代码? – ycrumeyrolle

+0

理想情况下,我正在寻找一个示例显示如何配置事件 – Mark

+0

我没有看到您提供任何类型的包含电子邮件声明的令牌。这是'StatusAPI'为你照顾的吗? –

回答

0

请尝试指定索赔的价值,如允许的电子邮件地址。由于这里建议 - https://docs.asp.net/en/latest/security/authorization/claims.html

重复码

options.AddPolicy("Founders", policy => policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));

+0

据我所知,只是限制了索赔的有效价值,并且据我所知,我没有任何索赔通过 – Mark

0

Autorization不能在没有认证完成。 您需要先认证用户,然后查看其身份以授予访问权限。

如果您的OAuth2 AS提供了JWT,则可以使用JWT身份验证中间件。

public void ConfigureServices(IServiceCollection services) 
{ 
    // add the authentication dependencies 
    services.AddAuthentication(); 
} 

public void Configure(IApplicationBuilder app) 
{ 
    app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
    // configure your JWT authentication here 
    }); 
} 

当然,JWT应该包含一个“email”声明。

你可以看一下在ASPNET核心样本: https://github.com/aspnet/Security/blob/dev/samples/JwtBearerSample/Startup.cs#L67