azure-active-directory - oid 在 AAD 中的所有租户中是否唯一?
问题描述
您是否知道对于以下两种情况,AAD 访问令牌中的 oid 声明在 AAD 中的所有租户中是否保证是唯一的:
- 当它是代表用户的对象ID时;
- 当它是表示应用程序服务主体的对象 id 时。
我对案例 2 特别感兴趣,因为我想知道我是否可以依靠 AAD 应用程序令牌中的以下组合之一来识别和授权应用程序。您对我们应该使用哪种组合有一些建议:
- 孤独的;
- Oid + 应用 ID;
- Oid + appId + tid(租户 ID);
- 其他。
谢谢!
解决方案
要回答您的第一个问题,oid 声明或 ObjectId 属性是不可变的并且是唯一的,因此它永远不应该改变以及唯一地标识相关的目录对象。
仅关于用户对象的 oid 声明的特别说明。如果单个用户存在于多个租户中,则用户将在每个租户中包含不同的对象 ID - 它们被视为不同的帐户,即使用户使用相同的凭据登录每个帐户也是如此.
以下是这部分的一些参考链接: 1.oid
用户声明 - Azure AD 令牌参考
在第二个问题上,您没有提到太多关于您授权服务主体的方式或场景。通常对于多租户应用程序,在为特定租户完成同意过程之前,服务主体甚至不存在(唯一的例外是在应用程序注册时创建服务主体的家庭租户,所有其他租户需要明确的同意过程)。
假设同意过程已经完成,此租户的服务主体存在,并且您只是使用传入令牌中的声明授权/验证某些应用程序中的调用,那么查看 appid 和 tid 声明也是有意义的,只是为了使合乎逻辑了解这是哪个 Azure AD 应用程序,以及租户是否有效。因此,根据您的选择,这将是第三种组合。
如果您还没有遇到过,这里是多租户应用程序的应用程序/服务主体关系的好读物。
推荐阅读
- javascript - 使用 Promise 顺序加载脚本
- c# - uwp 项目无法在 Visual Studio 2017 15.8 上构建
- c - 返回中的 or 运算符?
- react-native - 反应状态变化时如何防止动画滞后
- c# - 在c#中拥有Singleton类的正确方法是什么
- python - 当我尝试以 https://github.com/muatik/naive-bayes-classifier 形式使用 naive-bayes-classifier 时,我遇到了错误
- linux-kernel - 如何使用内核 GPIO 描述符接口
- android - 何时以及为什么会使用一组 Executor
- authentication - 如何在 Netlify Identity 上存储自定义用户数据?
- vue.js - bootstrap-vue modal打开三遍