簡體   English   中英

使用OAuth2保護和訪問.NET核心WebApi服務

[英]Securing and accessing a .NET core WebApi service using OAuth2

我有一個正在運行的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 } };
        }

我不確定問題是否出在我是否需要在對包裝程序的調用中傳遞聲明,或者是否在我的服務設置以及它如何檢測聲明中傳遞聲明。

請嘗試指定聲明的值,例如允許的電子郵件地址。 如此處建議-https: //docs.asp.net/en/latest/security/authorization/claims.html

重復代碼

options.AddPolicy("Founders", policy => policy.RequireClaim("EmployeeNumber", "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 Core示例: https : //github.com/aspnet/Security/blob/dev/samples/JwtBearerSample/Startup.cs#L67

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM