[英]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.