ASP.NET Core 2.0 API和IdentityServer4授权

时间:2018-04-19 07:52:46

标签: asp.net-core-2.0 identityserver4 asp.net-authorization

我们正在为外部合作伙伴开发ASP.NET Core 2.0中的API。例如,保险领域有各种产品,如汽车,旅游,家庭等。

现在,我们将IdentityServer4配置为身份验证类型“ResourseOwnerPassword”,并将API授权配置为 -

服务清单:

  1. https://domain:port/Motor/api/v1/CalculatePremium
  2. https://domain:port/Motor/api/v1/ProposalSync
  3. https://domain:port/Motor/api/v1/InstaProposalSync

  4. https://domain:port/Travel/api/v1/CalculatePremium

  5. https://domain:port/Travel/api/v1/ProposalSync
  6. 授权@API:

     services.AddAuthorization(options =>
        {
            options.AddPolicy("AuthPolicy", builder =>
            {
              builder.RequireScope("MotorApi","TravelApi","PaymentApi");
            });
        });
    

    问题: 我们如何授权指定具有所需范围的服务,意味着 Partner-A只能访问“Motor / api / v1 / CalculatePremium”,而不能访问其他产品服务。

    Partner-B只能访问旅行服务,而不能访问其他产品服务。

    请协助正确的方法来实现这一目标。

    提前致谢

1 个答案:

答案 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();

});

如果您愿意,可以通过将中间件设置为单独的类来设置中间件。