对于以下两种情况,您是否知道AAD访问令牌中的oid声明是否对AAD中的所有租户都是唯一的?
我对情况2特别感兴趣,因为我想知道我是否可以依靠AAD应用程序令牌中的以下组合之一来识别和授权应用程序。您对我们应该使用哪种组合有一些建议:
谢谢!
答案 0 :(得分:0)
要回答您的第一个问题,oid声明或ObjectId属性是不可变的,并且是唯一的,因此它永远都不应更改,并且应该唯一地标识相关的目录对象。
仅关于用户对象的oid声明的特殊说明。.如果单个用户存在于多个租户中,则该用户将在每个租户中包含一个不同的对象ID-即使用户使用以下方式登录到每个帐户,它们也被视为不同的帐户相同的凭据。
以下是此部分的一些参考链接:
1. oid
位使用者的版权声明-Azure AD Token Reference
Service principal entity reference in the beta version for Microsoft Graph API
在第二个问题上,您没有过多提及如何授权服务主体的方式或情形。通常对于多租户应用程序,在完成对服务器的同意过程之前,甚至不存在服务主体。特定租户(唯一的例外是家庭租户,在其他人的租户中,需要在申请注册时立即创建服务主体,而所有其他租户都需要明确的同意程序)。
假设同意过程已经完成,该租户已存在服务主体,而您只是使用传入令牌中的声明授权/验证某个应用程序中的调用,那么查看appid和tid声明也是有意义的,从逻辑上了解这是哪个Azure AD应用程序,以及租户是否为有效租户。因此,根据您的选择,它将是第三种组合。
如果您还没有碰到多租户应用程序的应用程序/服务主体关系,那么这里很好读。
Application and service principal objects in Azure Active Directory