Azure App Service - 跨服务的单一 AppRole
Azure App Service - Single AppRole across Services
我有一个名为 Web-App-1 的 ASPNET Core 网站和一个名为 Web-Api-1 的 ASPNET Core Web API。
我想保护 Web-Api-1 中的某个功能,以便它只能由某些用户调用。
我还想知道在 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.
中查看简单示例
我有一个名为 Web-App-1 的 ASPNET Core 网站和一个名为 Web-Api-1 的 ASPNET Core Web API。
我想保护 Web-Api-1 中的某个功能,以便它只能由某些用户调用。
我还想知道在 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.