Azure active directory 使用ADAL.js,在SPA配置的端点中将ClientId用作访问群体

Azure active directory 使用ADAL.js,在SPA配置的端点中将ClientId用作访问群体,azure-active-directory,adal,adal.js,Azure Active Directory,Adal,Adal.js,我正在创建一个AngularJS客户端,与两个ASP.Net核心(v2.0)API交互,所有这些API都将由Azure AD保护。由于需要使用角色和组,我们将使用v1端点,因此使用ADAL.js。UI客户端必须是每个API的独立项目,此外,UI项目不是Visual Studio项目,而是带有npm的VSCode。在我使用的UI项目中: AngularJS 1.6.9 用户界面路由器1.0.15 ADAL.js 1.0.17 经过长时间的尝试和错误,我采取以下步骤后,终于获得了UI,以便对AP

我正在创建一个AngularJS客户端,与两个ASP.Net核心(v2.0)API交互,所有这些API都将由Azure AD保护。由于需要使用角色和组,我们将使用v1端点,因此使用ADAL.js。UI客户端必须是每个API的独立项目,此外,UI项目不是Visual Studio项目,而是带有npm的VSCode。在我使用的UI项目中:

  • AngularJS 1.6.9
  • 用户界面路由器1.0.15
  • ADAL.js 1.0.17
经过长时间的尝试和错误,我采取以下步骤后,终于获得了UI,以便对API进行身份验证:

在UI项目中,我在Adal init()函数中包含了端点:

var endpoints = {
    'http://localhost:8000/api0/': '<API_0_CLIENT_ID HERE>',
    'http://localhost:8001/api1/': '<API_1_CLIENT_ID HERE>',
};

adalAuthenticationServiceProvider.init(
  {
    tenant: 'slurm.onmicrosoft.com',
    clientId: '00000000-0000-0000-0000-XXXXXXXXXX',
    endpoints: endpoints
  },
  $httpProvider
);
var端点={
'http://localhost:8000/api0/“:”

如果我没有在UI项目中提供端点,令牌甚至不会传递回API,因此身份验证失败

我不确定的是(没有明确的文档),UI clientId是否应该设置为每个API中的audienceId,还是将每个API客户端id嵌入到UI中

问题:

1) 对于一个独立于每个API的AngularJS UI项目,并且每个项目都在Azure AD中单独注册,我们是将UI客户端ID注册为每个API的访问群体,还是允许客户端知道每个API客户端ID

2) 为什么客户端上的ADAL init()函数似乎需要指定端点?或者我使用的端点不正确

根据的自述,UI似乎应该知道每个API的clientId(在步骤3中,配置它所说的WebApp):

在TodoListWebApp项目中,//…//找到TodoListResourceId属性,并用TodoListService应用程序的应用程序ID替换该值

但是,此示例不是SPA示例,因此不使用隐式流


非常感谢!

这是我最终得出的结论(经过大量的挖掘和尝试)。同样,本示例假设UI是一个独立于任何API的项目。对于上面的原始问题:

1) 对于独立于每个API的AngularJS UI项目,以及 每个项目在Azure AD中分别注册,我们是否注册 UI clientId作为每个API的访问者,或允许客户端知道 每个API客户端ID

客户端UI知道每个API,但使用应用程序ID URI

2) 为什么似乎需要在ADAL中指定端点 客户端上的init()函数?还是我使用了错误的函数

继续读下去

对于UI将访问的每个API,需要在endpoints map结构中声明一个端点。例如,假设我正在尝试使用以下相关信息访问AAD中注册的两个单独的API:

承租人:slurm.onmicrosoft.com

API_0
主页URL:“”
应用程序ID URI:“”

API_1
主页URL:“”
应用程序ID URI:“”

以下为参考资料:

  • 滚动至通过CORS调用API部分
  • 按照指向github示例的链接进行操作:
  • 关于github示例自述
  • 转到步骤3:配置to Go API以使用Azure Active 目录租户
  • 请参见第7步,其中说明:
  • 输入To Go API端点位置到其资源的映射 标识符或应用程序ID URI。终结点属性的名称 对象应该是To Go API的位置

    此外,如果查看代码示例,您将在ToGoAPI的web.config中看到,这表明“观众”值设置为ToGoAPI的应用程序ID URI

    注意:上面使用的应用程序Id URI的格式与Azure AD将使用的默认值类似 注册应用程序时提供。这些可以更改(只需确保在任何地方都更改)

    注2:在端点映射中,您会看到密钥不包含方案,并且与相应的主页URL不完全匹配。当我包含方案时,即https://我从API获得了401个响应

    adalAuthenticationServiceProvider.init(
      {
        tenant: 'slurm.onmicrosoft.com',
        clientId: '00000000-0000-0000-0000-XXXXXXXXXX',
        endpoints: {
            'localhost:8000': 'https://slurm.onmicrosoft.com/00000000-0000-0000-0000-aaaaaaaaaaaa',
            'localhost:4000': 'https://slurm.onmicrosoft.com/00000000-0000-0000-0000-bbbbbbbbbbbb',
        }
      },
      $httpProvider
    );