基于 Azure AD 组的登录和 MS 图形 API

Posted

技术标签:

【中文标题】基于 Azure AD 组的登录和 MS 图形 API【英文标题】:Azure AD group based login and MS graph API 【发布时间】:2018-10-19 01:56:23 【问题描述】:

我有 Angular 4 SPA、Web API(.net core 2.0) 和 Azure AD

我的要求是:

1.将 SPA 的身份验证(登录)仅限于某些 azure AD 组。例如。我有两个组“销售”和“营销”,如果用户是这两个组中的任何一个组的成员,那么只有用户应该能够登录

2.一旦用户登录,他就可以使用 Microsoft Graph API 对其他用户执行某些管理操作

我的方法

为了实现要求 #1,我正在考虑实现与 Azure AD 对话的身份服务器。然后 SPA 将使用身份服务器作为 IP 使用隐式流进行身份验证 为了达到要求 #2,我认为我需要使用 Oauth 2.0 授权代码流或 OAuth 2.0 客户端凭据授权,并且我的 web api(.net core 2.0) 将充当机密客户端,它拥有自己的访问令牌使用 MS graph API 执行管理操作 因此,一旦用户登录,流程将是 SPA(具有访问令牌以在 Web api 中授权)=> Web API(具有另一个具有高权限的访问令牌)=> MS 图 API => Azure AD

问题

我是否在正确的实施路径上? 如果不能,请指导我正确的方向?

【问题讨论】:

【参考方案1】:

我就是这样解决的

我使用了 Azure AD V2.0 端点、Angular 和 .net core 2.0

    使用implicit 流从 Azure AD 获取 ID 和访问令牌。此时我没有用户的组信息 由 Azure AD 创建 web api secured。它还识别从步骤 1 获得的访问令牌 将访问令牌传递给 API 并检索组信息以确定用户是否可以进入 SPA 实现claims transformation并将其缓存在Web API中 在 Web API 中创建 policy 以确保仅允许某些组的成员访问 API 端点 Web API 设置为使用客户端凭据授予流程与 Graph API 进行通信

【讨论】:

这需要一篇博文! @ChrisEdgington 如果您觉得这有帮助,我很乐意写这篇博文! 我确实觉得这很有帮助,但仍然在第 4 步中苦苦挣扎。您是如何实施声明转换的?您可以提供的示例或任何其他信息将非常有帮助。这方面的信息很少。 @ChrisEdgington 您所要做的就是实现 IClaimsTransformation 接口。这是一个示例:odetocode.com/blogs/scott/archive/2018/02/21/…。请参阅标题:使用声明转换删除组声明 好的,我明白了。但是你是如何让这些团体加入索赔的?就像你说的,如果你使用 Angular 的隐式流,你不会在令牌中获得组声明。我可以调用图形 API,但显然对每个请求都这样做并不好。我认为我缺少的一点是将 Graph API 调用与 Claims Principal 结合起来。

以上是关于基于 Azure AD 组的登录和 MS 图形 API的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C 图形 API 401 未经授权

Azure DevOps - 禁用项目团队中 AD 组的特定成员的项目访问权限

Azure AD B2C:自定义策略 - 登录不起作用

我应该如何获取 Azure AD B2C 用户的上次登录时间戳?

Azure AD和Windows AD功能对比

Azure AD和Windows AD功能对比