Azure App Service - 跨服务的单一 AppRole

Azure App Service - Single AppRole across Services

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

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

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

我可以通过在 AzureAd 中向 api 的应用程序注册添加 AppRole 并检查该应用程序角色的 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 应用程序?

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

  • Github issue 此特定示例
  • Whosebug post 提到类似流程(见评论)

另一种方法是为用户的访问令牌调用 API 并在那里设置他的角色。

[编辑]:
要将 API 调用集成到 Authorize 属性中,您可以使用 IAuthorizationMiddlewareResultHandler。您可以在 docs or more comprehensive one in this post.

中查看简单示例