NameIdentifier vs ObjectIdentifier

问题描述 投票:16回答:2

我有一个使用OpenIdConnect和Azure AD作为Office 365身份提供程序的多租户ASP.NET应用程序。当用户通过身份验证后,我会在ClaimsPrincipal.Current中收到我的声明。

我想识别用户并将此id引用存储在我的数据库中。我问this question。有人回答说

当尝试唯一地识别用户时[NameIdentifier]应该是您的首选。

但似乎NameIdentifier声称,http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier取决于应用程序。确切地说,如果我在Azure AD中创建另一个应用程序,那么NameIdentifier对于同一个真正的Office365用户来说就不一样了。请记住,我们可能必须创建另一个Azure AD清单(因为我们可能需要其他范围),我们应该能够找回相同的最终用户。

与此同时,我评论了另一个主张:ObjectIdentifier http://schemas.microsoft.com/identity/claims/objectidentifier

ObjectIdentifier似乎对于给定Office 365用户的所有Azure AD保护应用程序都是相同的。

你能准确解释这两种说法之间的区别吗?更重要的是,您能否确认ObjectIdentifier可以在任何Office 365订阅中用作用户的“通用”标识符。

azure-active-directory claims-based-identity office365api azure-ad-graph-api
2个回答
2
投票

确切地说,如果我在Azure AD中创建另一个应用程序,则NameIdentifier对于同一个真正的Office365用户将不同。

我进行了如下快速测试:

在AD Contoso中注册多租户-webapp和单租户-webapp。

使用[email protected]登录并在两个Web应用程序中获取名称标识符,事实证明两个应用程序中的名称标识符相同。因此,名称标识符应该能够识别用户跨应用程序,但不能用于标识Azure AD中的用户。

对于对象标识符,它是一个GUID,可用于标识Azure AD中的用户。例如,您可以使用对象标识符在Azure AD中查询用户。

电源外壳:

$msolcred = get-credential
connect-msolservice -credential $msolcred
get-msoluser -ObjectId "{guid:object_identifier}"  

更重要的是,您是否可以确认ObjectIdentifier可以用作任何Office 365订阅中的用户的“通用”标识符。

根据我的理解,对象标识符是一个GUID,可以为Office 365订阅中的用户标识。


0
投票

或者换一种说法:

NameIdentifier是在Azure AD中注册的应用程序的GUID。无论是单租户还是多租户应用,这都不会改变。如果您使用客户端凭据(即AppId和AppSecret)来验证AS应用程序或使用真实用户凭证(即委托)使用日志记录,则无关紧要,NameIdentifier将保持不变。

当使用客户端信用时,ObjectIdentifier是用户在使用应用程序的委托或服务主体名称(SPN)时的用户主体名称(UPN)。

当应用程序是多租户时,您看到不同的ObjectIdentifier值的原因是每个TENANT中都有一个单独且唯一的SPN,它指向应用程序注册的租户中的ApplicationGUID。此SPN用于根据每个租户中的资源为应用程序分配权限。

© www.soinside.com 2019 - 2024. All rights reserved.