【问题标题】:Azure App Service - Single AppRole across ServicesAzure 应用服务 - 跨服务的单一 AppRole
【发布时间】:2022-02-05 18:02:36
【问题描述】:

我有一个名为 Web-App-1 的 ASPNET Core 网站和一个名为 Web-Api-1 的 ASP NET Core Web API。

  1. 我想保护 Web-Api-1 中的某些功能,以便它只能由某些用户调用。

  2. 我还想在 Web-App-1 中了解当前用户是否可以调用安全功能,如果不能,我不会为他们提供这样做的机会。

我可以通过将 AppRole 添加到 AzureAd 中 api 的应用注册并检查该应用角色的 ClaimIdentity 来满足要求 1。

if (this.ControllerContext.HttpContext.User.HasClaim(
    System.Security.Claims.ClaimsIdentity.DefaultRoleClaimType,
    "SecuredApiFunctionality") == false)
{
    return new UnauthorizedObjectResult("User does not have SecuredApiFunctionality role");
}

但是,当我在 Web-App-1 的上下文中查看该用户的声明时,我看不到“SecuredApiFunctionality”。我认为这是因为它是属于 Web-Api-1 的 AppRole,而我在 Web-App-1 中。

我可以在 Web-App-1 中定义第二个 AppRole 并为其设置权限,但这对我来说听起来像是重复。有没有一种方法可以只使用一个角色来保护 API 和 Web 应用?

【问题讨论】:

    标签: asp.net asp.net-core azure-active-directory msal microsoft-identity-platform


    【解决方案1】:

    不幸的是,除了在App 中定义重复角色之外,我没有其他方法可以实现您想要的。 如果您查看this sample,它就是在那里完成的。 还有一些其他资源:

    另一种方法是调用API 获取用户的访问令牌并在那里拥有他的角色。

    [编辑]:
    要将 API 调用集成到 Authorize 属性中,您可以使用 IAuthorizationMiddlewareResultHandler。您可以在docs 中查看简单示例,或者在此post 中查看更全面的示例。

    【讨论】:

    • 我如何将 API 的调用集成到使用 Authorize 属性保护网站控制器,该控制器操作将 UI 隐藏在视图中?
    • @PatLong-MunkiiYebee,抱歉回复晚了 - 我编辑了帖子
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2018-04-23
    • 2016-04-10
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多