我们正在为外部合作伙伴开发ASP.NET Core 2.0中的API。例如,保险领域有各种产品,如汽车,旅游,家庭等。
现在,我们将IdentityServer4配置为身份验证类型“ResourseOwnerPassword”,并将API授权配置为 -
服务清单:
授权@API:
services.AddAuthorization(options =>
{
options.AddPolicy("AuthPolicy", builder =>
{
builder.RequireScope("MotorApi","TravelApi","PaymentApi");
});
});
问题: 我们如何授权指定具有所需范围的服务,意味着 Partner-A只能访问“Motor / api / v1 / CalculatePremium”,而不能访问其他产品服务。
Partner-B只能访问旅行服务,而不能访问其他产品服务。
请协助正确的方法来实现这一目标。
提前致谢
答案 0 :(得分:0)
您可以在用户登录时为其分配角色,并使用如下的中间件:
app.Use(async (context, next) => {
if (context.User.Identity.IsAuthenticated)
{
if (context.Request.Path == "/Motor/api/v1/CalculatePremium"
&& !context.User.IsInRole("Partner-A"))
{
context.Response.StatusCode = 403;
}
else await next();
}
else await next();
});
如果您愿意,可以通过将中间件设置为单独的类来设置中间件。