azure - 向 Azure 进行身份验证时的自定义应用程序权限和授权

标签 azure oauth-2.0 azure-active-directory azure-ad-msal microsoft-identity-platform

在假设的场景中,我使用 Microsoft Identity Platform 进行身份验证,我将如何利用它来控制用户权限。具体来说,自定义应用程序中的用户权限。这些权限不会与其他 Azure 资源或应用程序相关。例如,一个 Web 应用程序允许生产工厂的各种不同运算符(operator)启用和禁用工厂中的不同系统,例如水冷却器、空气压缩机和传送带。如果我有一个 Web 应用程序允许用户控制工厂车间的这些设备,我如何使用 MSAL 来控制应用程序中这些不同区域的权限?我只希望用户 A 控制冷却器和压缩机,并且只希望用户 B 控制皮带。我已经知道如何使用 MSAL 对应用程序的用户进行身份验证。我更愿意使用类似于 AzureAD 组的方法来控制权限,除非有更适合此用例的方法。

最佳答案

场景 1:

您有一个包含所有业务逻辑的 Web 应用程序。对于此场景,您可以在 Azure AD 中为 Web 应用程序创建一个应用程序注册,并为各个运算符(operator)定义应用程序角色。您可以随意命名这些应用程序角色,例如:Coolers.Control 和 Belts.Control。

Example App Registration for Web App with App Roles (Image)

可以在企业应用程序页面将这些角色分配给 Azure AD 中的单个用户或组。如果您单击应用程序角色页面上的“如何分配应用程序角色”,您将找到将您重定向到企业应用程序页面的链接。

如果用户导航到您的 Web 应用程序并使用授权代码流登录,OAuth 2.0 授权端点将返回包含角色声明的身份 token 。您可以在 Web 应用程序中使用这些角色来确定允许用户访问哪些区域。

更多信息:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-sign-user-overview?tabs=aspnetcore

场景 2:

但是您可能还需要考虑另一种选择。您还可以仅为 UI 逻辑创建一个 Web 应用程序,并将业务逻辑放置在单独的 Web API 中。通过此架构,您可以允许多个( future )客户端应用程序使用 API 的功能,例如: native 移动应用程序或后台应用程序。

对于您的场景,您将创建两个应用程序注册:一个用于您的 Web 应用程序,另一个用于您的 Web API。您可以在 Web API 的应用程序注册中定义应用程序角色,并定义范围(例如:access_as_user)以允许委派访问。需要将此范围分配给您的 Web 应用程序的应用程序注册。

Example App Registration for Web API with Scope (Image)

在 Web 应用程序中,您在调用授权端点时使用 access_as_user 范围(包括应用程序 ID 前缀)。如果用户登录并将此范围授予 Web 应用程序,以便它可以代表登录用户调用 Web API,授权端点将返回访问 token 。如果应用程序角色在 Web API 的应用程序注册中定义并分配给用户,则访问 token 将包含角色声明。该 token 用于 Web API 向用户授权。当Web应用程序调用Web API时,它还会在HTTP请求的授权 header 中发送此访问 token 。 Web API 根据访问 token 中的角色确定允许用户执行的操作。

更多信息:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-call-api-overview

其他信息:

因为我有类似的问题,所以我写了一篇有关了解 Azure AD 中的范围和应用角色的文章。本文介绍如何在委派访问场景中同时使用范围和应用程序角色,以及如何在仅应用程序访问场景中使用应用程序角色。我认为这回答了您有关如何使用类似于 Azure AD 组的内容来控制权限的问题。

网址:https://cloudfirstapproach.com/understanding-oauth-scopes-and-roles-in-azure-ad/

关于azure - 向 Azure 进行身份验证时的自定义应用程序权限和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74957198/

相关文章:

azure - 错误: Unsupported Terraform Core version

azure - 如何使用承载 token 授权一个 Azure Active Directory 应用程序访问不同的 AAD 应用程序服务 Web API?

azure - Azure AD 中的自定义身份验证

android - 当我从其他计算机上的存储库克隆项目时 Ionic2 出错

没有 client_secret 的 OAuth2 授权代码 PKCE (wso2 5.3.0 IAM)

azure - 如何实现多个IdentityServer

azure-active-directory - 无法使用委派权限通过 Microsoft Graph API 发送电子邮件

azure - 如何将 Jmeter 与 Databricks Spark 集群连接

templates - 新 api 应用程序资源的 Azure 资源模板

azure - 使用分页时的 Documentdb 性能