程序化 Azure AD 应用程序发现

Programmatic Azure AD Application Discovery

我有一项服务将作为应用程序在 Azure AD 中注册。它将在每个地区(美国西部、美国东部等)注册一个应用程序。调用此服务的客户端需要获取访问令牌。访问令牌的受众必须是该地区的相应服务。服务按区域隔离,因此一个区域中服务的访问令牌不能用于访问另一个区域中的服务。这是设计使然。

是否有适当的 way/recommended 应用程序发现最佳实践?

我探索了使用 Graph API 的想法。在模型中:

  1. 每个注册服务都将使用模板化命名约定创建,例如-.这里有一个问题,如果在注册这些应用程序的租户内部没有适当的协调,我们最终可能会发生名称冲突。

  2. “发现应用程序”(为发现的唯一目的而注册的应用程序)将具有 Application.Read Graph API 权限。此处的身份验证将基于 X509 证书以提高安全性。

  3. 使用针对发现应用程序获取的访问令牌,客户端将查询图形 API 以查找与名称匹配的预期服务应用程序受众。获取该应用程序信息后,我们将获得服务应用程序 ID。同样,上面 #1 的问题仍然存在 - 还将找到另一个使用相同名称注册的应用程序。

  4. 然后客户端将使用获得的服务应用程序 ID 获取访问令牌以与服务对话。

任何 help/direction 将不胜感激。如果已经有合适的模式,我想确保我不会重新发明轮子。

你的设计是可行的。当然,您需要对app注册的名称进行合理的调整,以消除名称冲突的影响。

我有一个建议,您可以将这些服务应用程序注册添加到一个安全组中,并使用 Microsoft Graph(测试版)通过过滤器(模板化命名约定)列出它们。

引用here:

GET https://graph.microsoft.com/beta/groups/{id}/members?$count=true&$filter=startswith(displayName, 'a')
ConsistencyLevel: eventual

请注意 $count=true 并要求 header ConsistencyLevel: eventual 是必要的。

响应中有一个属性 appId,这就是您所需要的。这样就可以尽量避免名字冲突的影响。