基于Azure AD组的登录和MS graph API

基于Azure AD组的登录和MS graph API,azure,azure-active-directory,microsoft-graph-api,asp.net-core-2.0,asp.net-core-webapi,Azure,Azure Active Directory,Microsoft Graph Api,Asp.net Core 2.0,Asp.net Core Webapi,我有Angular 4 SPA、Web API(.net core 2.0)和Azure广告 我的要求是: 1.将SPA的身份验证(登录)仅限于某些azure广告组。例如,我有两个组“销售”和“营销”,如果用户是这两个组中的任何一个组的成员,那么只有用户才能登录 2.用户登录后,可以使用Microsoft Graph API对其他用户执行某些管理操作 我的方法 为了实现需求#1,我正在考虑实现Identity server,它将与Azure AD对话。然后,SPA将使用Identity ser

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

我的要求是:

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

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

我的方法

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

  • 我是否走上了正确的实施道路
  • 如果没有,你能给我指引正确的方向吗

    • 我就是这样解决的

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

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

    • 这需要一篇博文@如果你觉得这有帮助的话,我很乐意写这篇博文!我确实觉得这很有帮助,但仍在努力完成第4步。您是如何实现索赔转换的?一个例子或者你能提供的任何其他信息都会非常有用。关于这方面的信息很少。@ChrisEdgington您所要做的就是实现IClaimsTransformation接口。下面是一个例子:。请参阅标题:使用索赔转换删除组索赔OK,我得到了这一点。但你是如何让这些团体参与索赔的?就像你说的,如果你使用隐式流和Angular,你就不会得到令牌中的组声明。我可以调用graph API,但显然在每个请求上都这样做是不好的。我认为我缺少的是将graph API调用与声明主体连接起来。