Azure active directory 为什么我需要两个AAD应用程序才能将角色添加到访问令牌中?

Azure active directory 为什么我需要两个AAD应用程序才能将角色添加到访问令牌中?,azure-active-directory,Azure Active Directory,正如许多示例所示,我有两个AAD应用程序注册,一个用于基于javascript的前端,另一个用于仅JSON的web API 如果我完全信任我的客户机AAD应用程序,为什么AAD要求我为我的web API创建第二个AAD应用程序 例如,假设我向客户机AAD应用程序添加了特定角色,如果客户机使用AAD登录并获得包含我的角色的id令牌和访问令牌,它只需要将访问令牌发送到我的API。API只需要破解JWT,验证受众、发行者、租户、角色权限和签名。在这个世界上,web API中不需要客户机机密,也不需要第

正如许多示例所示,我有两个AAD应用程序注册,一个用于基于javascript的前端,另一个用于仅JSON的web API

如果我完全信任我的客户机AAD应用程序,为什么AAD要求我为我的web API创建第二个AAD应用程序

例如,假设我向客户机AAD应用程序添加了特定角色,如果客户机使用AAD登录并获得包含我的角色的id令牌和访问令牌,它只需要将访问令牌发送到我的API。API只需要破解JWT,验证受众、发行者、租户、角色权限和签名。在这个世界上,web API中不需要客户机机密,也不需要第二次AAD应用程序注册,而且仍然不需要从我的API调用AAD。不幸的是,如果没有两个AAD应用程序,我无法找到一种方法让AAD将角色包含到我的访问令牌中

如果我不完全信任发行人,不让其参与索赔,我可以理解为什么我需要两个AAD应用程序和一个客户机密。但既然我信任我的AAD应用程序和JWT的签名,为什么会有额外的复杂性?或者也许有一种方法我还没有找到

谢谢


在这里回复Marc,因为注释字段中没有足够的字符——您引用的是一个很好的示例,特别是。事实上,这就是我现在正在做的。然而,问题是示例中的Web API对任何在租户上进行身份验证的人开放。我需要将Web API的安全性降低到租户中的某些个人,而仅仅检查客户机/应用程序id是不够的

所以我需要做的是将角色添加到访问令牌中,这样我就知道我的应用程序对用户进行了身份验证,并且该用户已经被授予了所需的角色。例如,下面是一个例子。甚至微软的一段视频也在讲述这一过程

如果我没有两个带有客户机机密的AAD应用程序,那么访问令牌中永远不会提供角色声明。它总是在id令牌中提供,而不是在访问令牌中提供


我觉得我错过了一些明显的东西。如果AAD在我对JWT进行身份验证时将我请求的角色放入JWT,并且我验证了它的签名、受众、颁发者和角色,那么我就不需要任何额外的复杂性了?

你能提供一个链接来显示需要两个应用程序吗?只有当您要调用的API不是由向浏览器提供JS的web应用程序提供时,才会出现这种情况。所有这些都不要求您注册两个应用程序(其中一些示例中使用的Graph API是一个单独的API,并且已经注册)。从浏览器传递的令牌的一个问题是,它们是由公共客户端获取的,除了用户信誉之外,没有使用任何机密。因此,它们更容易被盗和重复使用。您自己的后端应用程序可能希望使用一个秘密来获取自己的令牌(扩展授权),以便使用不在公共客户端中的令牌调用另一个API。

啊,我想我理解您的目的:您希望控制哪些用户可以访问API,无论他们使用什么客户端应用程序访问API。这是API的一个功能-您无法通过AAD控制它。在AAD中,您可以使用用户访问限制(企业选项卡)或基于角色的访问控制哪些用户可以访问哪些应用程序(UI)。但是,通过作用域在调用应用程序级别的AAD中控制对API的访问。用户永远不会直接访问API,而只能由其他应用程序访问,因此在用户级别控制访问权限将导致管理混乱。因此,您可以控制用户在其使用的应用程序中拥有的权限,也可以控制应用程序(客户端)在其使用的其他应用程序(API、资源服务器)中拥有的权限

换句话说:角色是关于用户对UI的访问,范围是关于一个应用对另一个应用的访问


应用程序机密为获取令牌提供了额外的安全性-它们与令牌中包含的权限无关。

谢谢您的评论,我在上面的原始问题中回答了您的问题,因为“评论”字段没有提供足够的字符。请更正并道歉。您可以为API()定义用户角色,并通过“企业”选项卡将用户分配给这些角色。如果您的客户端应用程序随后要求用户委派令牌,AAD将向API返回一个访问令牌,该令牌包括请求的作用域和一个角色声明,其中用户角色已分配给该用户。您的API需要同时使用作用域和角色声明进行授权。很抱歉,前面AAD忽略了为API定义的角色。您的客户端可以只要求用户\u模拟范围(即使未明确定义,API也始终具有该范围)。然后,访问令牌将只有这一个作用域和用户角色。