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

C# 使用OAuth2保护和访问.NET核心WebApi服务,c#,oauth-2.0,asp.net-core,.net-core,asp.net-core-webapi,C#,Oauth 2.0,Asp.net Core,.net Core,Asp.net Core Webapi,我有一个工作的Asp.NET核心WebApi服务和一个可以从Asp.NET核心MVC应用程序调用的。使用自动测试生成的包装器调用该服务。当网站使用OAuth2进行安全保护时,该服务当前没有安全层 我已将以下内容添加到服务中: public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsigh

我有一个工作的Asp.NET核心WebApi服务和一个可以从Asp.NET核心MVC应用程序调用的。使用自动测试生成的包装器调用该服务。当网站使用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
但是,当我调用自动测试包装器时,会出现“未经授权”的异常:

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

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

请尝试指定声明的值,如允许的电子邮件地址。正如这里所建议的-

重复代码

options.AddPolicy(“创始人”,策略=>
政策要求回收(“员工编号”、“1”、“2”、“3”、“4”、“5”)


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

如果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核心示例:

据我所知,这只是限制了索赔的有效价值,据我所知,我没有任何声明,其中有一个身份验证中间件或一些自定义代码填充了主体中的电子邮件声明?理想情况下,我正在寻找一个示例,说明需要如何配置。我看不到您提供任何类型的令牌,其中包含电子邮件声明。这是
StatusAPI
为您处理的事情吗?