azure-active-directory - Azure AD 企业应用程序 - 识别调用者应用程序
问题描述
我有一个 REST API,它使用 Azure ADD App 注册来允许其他应用程序调用它。
在 Azure 门户中,我已将其注册为企业应用程序,还注册了消费者应用程序并适当地为其分配了角色。
身份验证和 RBAC 工作正常。
但是我正在处理的用例要求我识别并记录传入请求调用应用程序的名称(当我们查看企业应用程序的用户和组列表时,在门户中显示为“显示名称”的名称)。
正如互联网上所建议的,我正在使用一些与身份相关的 API 从请求标头中读取声明。
var provider = claimsUser.FindFirst("http://schemas.microsoft.com/identity/claims/identityprovider").Value;
var sid = claimsUser.FindFirst(ClaimTypes.NameIdentifier).Value;
OR
var sid = claimsUser.FindFirst("stable_sid").Value;
但这给了我一个 GUID 值,我无法将其映射到企业应用程序的任何消费者。
客户端都在 Azure 门户中注册。
在门户中,我可以在企业应用程序的“用户和组”部分看到应用程序及其适当的角色。
在使用方面,在进行调用之前,客户端会根据从 Azure 获得的证书生成不记名令牌。使用附加到请求标头的不记名令牌进行调用。此不记名令牌在每个控制器之前设置的过滤器中针对 Azure AD 进行验证。
我想要获得的是有关拨打电话的该客户端的详细信息。根据一些回复,并且我同意,作为上面提到的上一个调用的一部分,我得到的 Guid 是针对实际用户的,而不是用于调用的应用程序本身。
任何人都可以对此有所了解..一些代码片段将有真正的帮助..
解决方案
我不确定您使用的是哪种身份验证流程,但 SID 通常适用于已登录的用户,而不是应用程序。如果您的客户端应用程序使用客户端 ID 和密钥,则它返回的发送到 api 的令牌应包括应用程序注册 guid。https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow#access-control-lists。所以 appid 和 iss 应该给你应用注册的 guid。使用它,您可以调用图形 api,以识别应用注册的显示名称。https://docs.microsoft.com/en-us/graph/api/application-get?view=graph-rest-1.0&tabs=http
如果您的应用程序是用户登录应用程序,并且您不想调用图形,则可以作为解决方法的另一个选项是创建应用程序角色并将用户分配给他们,但使用某种约定命名应用程序角色包括应用程序的显示名称。那么名称可以通过角色声明来获得.. https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps
这些是一些选项..但除了调用图形或有点工作以将名称注入令牌的不同声明之外,我不确定任何其他方法来获取“应用程序注册的显示名称”
推荐阅读
- xml - 无法在以 xmlns 开头的属性中使用 AVT 检索值
- spring-boot - 发布请求的响应为空
- java - 在 Spring Boot 应用程序的性能测试(Jmeter)期间,被测试的方法有一些非常短的运行时
- c# - 使用 Bouncy Castle (FIPS) 加密/解密很长的流
- swift - 从 iOS 本地目录加载 .rcproject
- python - 通过 Anaconda 在 MacOS 上的 PyTorch 安装问题
- python - 我们如何使用 div id 访问 div 元素文本
- c - 不同的指针如何相互影响?
- javascript - 如果 GoogleJsonResponseException: 则跳过并移至下一行
- typescript - 数组永远不会为空,但打字稿不知道