我已使用Azure应用注册来注册我的应用。在清单中,我添加了appRoles。然后,我使用Azure企业应用程序将用户和组添加到我创建的appRoles。我是否需要更新清单中的"groupMembershipClaims":"SecurityGroup“,因为我在企业应用程序中添加了组?是否可以在企业应用程序中对组使用基于角色的声明?
发布于 2019-05-30 11:37:39
在这里你可能混淆了两个完全不同的概念。我将在下面给出每一个的细节,然后你就可以决定你的应用程序是否真的需要组声明。
我的猜测是你对角色声明感兴趣,所以你不需要更新你的应用程序清单来包含"groupMembershipClaims": "SecurityGroup",但你是你的应用程序需求的最佳判断者。
应用程序角色
您可以通过编辑应用程序清单和添加appRoles来定义应用程序角色。现在,您可以将这些角色分配给单个用户,甚至分配给Azure AD组。
您可以通过转到企业应用程序,然后使用门户UI将角色分配给各个用户。看起来你已经为你的应用程序做到了这一点。当用户登录到您的应用程序时,传入的访问令牌包含用户的角色声明。例如,将"roles": ["MyAppCustomRole1"]
你可以将应用程序角色分配给Azure AD组(如果你有Azure AD Premium)。这可能很方便,尤其是在处理大量用户时。通过这种方式,您不需要将appRole分配给单个用户,而是可以根据他们的组成员身份批量分配。
如果这就是您要做的,那么您不需要更新您的应用程序清单来包含"groupMembershipClaims": "SecurityGroup"
示例代码- Authorization in a web app using Azure AD application roles & role claims
微软文档- Application roles
集团索赔
你可以通过编辑你的应用程序的清单(这可以直接在Azure Portal中完成)并根据需要将"groupMembershipClaims"属性设置为"All"或"SecurityGroup",来启用组声明作为应用程序访问令牌的一部分。
如上所述更新应用程序清单后,您可以获得组Id作为声明的一部分。下面是一个解码的JWT令牌的快速示例。请注意,与前面解释的角色声明相比,这是一个完全不同的声明。

示例代码- Authorization in a web app using Azure AD groups & group claims
Groups v/s Roles
请务必了解,Azure AD组及其成员资格与任何单个应用程序都是完全分开的。
Azure AD组的生存期也可能不同,即在应用程序被删除或不再需要后,组可能会继续存在很长一段时间。
另一方面,应用程序角色与一个特定的应用程序密切相关。
对于某些应用程序,授权策略是检查用户的组成员身份,而不是特定于应用程序的角色。我也见过应用程序根据应用程序特定的角色和用户所属的组的组合做出授权决策的情况。
另外,为了确保令牌大小不超过HTTP头大小限制,Azure AD限制了它在组声明中包括的objectIds的数量。如果用户是超过超时限制的组的成员( SAML令牌为150,JWT令牌为200 ),则Azure AD不会发出令牌中声明的组。相反,它在令牌中包含一个超时声明,指示应用程序查询Graph API以检索用户的组成员资格。
其他相关的SO帖子:
https://stackoverflow.com/questions/56370400
复制相似问题