使用OAuth2保护和访问.NET核心WebApi服务

时间:2016-08-31 14:18:54

标签: c# oauth-2.0 asp.net-core .net-core asp.net-core-webapi

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

我已将以下内容添加到服务中:

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 } };
        }

我不确定问题是否在于我需要一种方法来传递我对包装器的调用中的声明,或者它是否在我的服务设置中以及它如何检测声明。

2 个答案:

答案 0 :(得分:0)

Please try specifying the value of the claim like the allowed email address. As suggested here - https://docs.asp.net/en/latest/security/authorization/claims.html

Repeated the code

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

答案 1 :(得分:0)

如果没有身份验证,则无法进行自动化。 您需要先对用户进行身份验证,然后查看其身份以授予访问权限。

如果您的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应该包含“电子邮件”声明。

您可以查看ASPNET Core示例: https://github.com/aspnet/Security/blob/dev/samples/JwtBearerSample/Startup.cs#L67