通过@azure/msal-angular library in angular 8获取azure ad user group

Get azure ad user group by @azure/msal-angular library in angular 8

我正在使用 @azure/msal-angular。使用 loginRedirect() 重定向到 Microsoft 登录页面,我得到了 access_token 和组 ID 的响应。但是我需要组详细信息来在我的应用程序中实施访问控制。是否需要任何额外的配置设置来获取组详细信息。

我的配置:

MsalModule.forRoot({
  clientID: <clientId>,
  authority: `https://login.microsoftonline.com/<tenantId>`,
  redirectUri: "http://localhost:4200/",
  cacheLocation: "localStorage",
  popUp: !isIE,
  consentScopes: ["user.read", "api://<clientID>/GFS_EClaims_UI"],
  storeAuthStateInCookie: false,
  postLogoutRedirectUri: "http://localhost:4200/",
  protectedResourceMap: protectedResourceMap
})

或者要获取群组详细信息,我是否需要在 loginRedirect() 之后调用 Microsoft graph api?

提前致谢!

您无法从令牌中获取群组详细信息。您只能在声明中获取如下组 ID:

{
  "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}

有关访问令牌中受支持的声明,请参阅 https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#claims-in-access-tokens

但要控制对您的应用程序的访问,我认为您不需要组详细信息。您可以只使用组 ID 来决定用户是否有权访问该资源。

更好的方法是组合组和角色。您可以定义一些应用程序角色并将这些角色分配给组。那么群里的用户就会有如下的claim:

{
  "roles": ["admin"]
}

然后你可以根据用户的角色来实现你的授权逻辑。

参考https://joonasw.net/view/using-groups-vs-using-app-roles-in-azure-ad-apps and https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps了解更多详情