【问题标题】:Enable authentication on OData endpoints (Asp.Net Core Web Api)在 OData 端点上启用身份验证 (Asp.Net Core Web Api)
【发布时间】:2021-03-11 10:46:17
【问题描述】:

我正在努力在使用 OData 的 Web Api 项目中进行身份验证。 我认为像这样配置身份验证:

services.AddODataAuthorization((options) =>
{
    options.ConfigureAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(Configuration.GetSection(Constants.AzureAd));
});

足以启用对 OData 端点的所有请求的身份验证。但无论令牌是否传递,有效或无效 - 始终执行 api 方法。永远不会返回 HTTP 401(未经授权)。

the examples 之一中明确使用了HasReadRestrictions 方法:

customers.HasReadRestrictions()
                .HasPermissions(p => p.HasSchemeName("Scheme").HasScopes(s => s.HasScope("Customers.Read")))
                .HasReadByKeyRestrictions(r => r.HasPermissions(p =>
                    p.HasSchemeName("Scheme").HasScopes(s => s.HasScope("Customers.ReadByKey"))));

是否必须像这样配置所有 OData 实体?

【问题讨论】:

  • 您是否在控制器或方法上使用[Authorize] 属性?
  • @JHBonarius 是的。在那个项目中,我有正常的 api 控制器,授权运行良好。只有 OData 控制器传递未经身份验证的请求。
  • 有什么有用的信息here

标签: asp.net-core odata asp.net-core-webapi


【解决方案1】:

据我了解,目前您必须为包括 OData 在内的所有控制器指定 [Authorize] 属性,因为它们与其他控制器没有任何不同。 ODataController 派生自 ControllerBase。

这有点奇怪,因为您必须指定两次相同的东西。

方案权限将在$metadata 端点中公开,但不会自动应用。 有an authorization library 解决了这个问题,添加了一个中间件。但它自 2020 年起处于测试阶段,仅适用于 OData

现在,您是否需要在 EDM 中复制策略是有问题的。例如,我需要在 OpenAPI 规范中公开它。由您决定是否需要它们。

【讨论】:

    猜你喜欢
    • 2016-12-22
    • 2022-01-27
    • 2018-01-28
    • 2017-11-24
    • 2020-07-27
    • 2018-03-15
    • 2013-12-22
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多