发出角色';在JWT和AAD(Azure AD)中声明的s权限

发出角色';在JWT和AAD(Azure AD)中声明的s权限,jwt,azure-active-directory,jwt-auth,Jwt,Azure Active Directory,Jwt Auth,我需要在JWT中声明角色的权限 其目的是获得JWT中声明的特定用户的权限,以进行授权 该用户属于一个组,该组与在Azure Active Directory中具有特定权限的特定角色关联 澄清: 如果我将一些项目添加到应用程序清单中的appRoles数组中,则角色名称将以以下格式作为JWT中的角色类型声明发出: :[清单appRoles数组中显示的appRole项中的value属性] 但我找不到任何方法将角色的权限名称(或任何其他属性)作为声明发出 我已经在微软的文档中搜索和挖掘了好几天,但什么也

我需要在JWT中声明角色的权限

其目的是获得JWT中声明的特定用户的权限,以进行授权

该用户属于一个组,该组与在Azure Active Directory中具有特定权限的特定角色关联

澄清: 如果我将一些项目添加到应用程序清单中的appRoles数组中,则角色名称将以以下格式作为JWT中的角色类型声明发出: :[清单appRoles数组中显示的appRole项中的value属性]

但我找不到任何方法将角色的权限名称(或任何其他属性)作为声明发出

我已经在微软的文档中搜索和挖掘了好几天,但什么也找不到。我希望这是可能的

如果不可能,一个笨拙的解决方法可能是将我们需要发出的权限表示为AAD角色,并将角色(在“一组权限”的意义上)表示为AAD特殊组,然后将我们希望与角色关联的组(在理想世界中)关联到该特殊“角色”组

但这是非常笨拙的,因为我们实际上将失去角色(一组权限)的自然含义,以及组(一组用户和/或组)的自然含义


感谢您的帮助:)

value属性是您配置的自定义角色名称,将在JWT中返回。这是设计的

权限名称不会在JWT中返回。在你将appRole添加到Azure广告应用程序后,你需要

您需要在Azure AD APP中添加所需的权限,然后控制代码中的权限

我们假设您已在Azure AD应用程序中分配了自定义角色,并将用户添加到此角色


当用户登录时,将返回包含角色声明的令牌。您可以判断用户在代码中的角色。如果符合自定义许可,则允许他执行操作。如果用户不符合任何许可,则表示他没有执行任何操作的权限。

谢谢您的回答,但我已经完成了您编写的所有内容,并且正在运行。正如问题的标题和正文中所强调的那样,我特别要问的是,是否有一种方法可以将与该自定义角色关联的权限本身作为jwt中的声明发出,以便我可以生成真正的基于声明的身份验证而不是基于角色的身份验证?如果您只想知道用户拥有什么权限,您只能为每个角色分配一个权限。并将value属性设置为与权限名称相同。这正是我在quesiton中描述的笨拙解决方法(稍加扩展),它使角色失去了作为“权限集”的用途(就像组是“用户和/或其他组集”)。虽然可能会发出groups ObjectId(为了不使JWT太大,有一定数量的限制,在这种情况下,我们应该只调用Graph API来获取所有组),但我没有看到任何方法可以发出所声称的权限。调用Graph API是一个昂贵的往返过程,我试图避免。当然,我不会再问这个问题了,我正在寻找基于声明的授权,而不是基于角色的授权,就像identity server一样。如果我自己编写一个auth服务器,我将提供一个选项来发出用户的直接权限(例如,如果使用Identity,则来自UserClaims表)以及与用户所属的所有组关联的所有角色关联的所有权限(从RoleClaims与用户角色和用户组角色联合),从而直接或间接获得用户拥有的所有权限