我们有一个使用Asp.Net Identity的Asp.Net 4.5 MVC应用程序来管理我们的客户数据库.我们目前正在使用Microsoft帐户身份验证.我们正在考虑使用OpenId Connect,以便拥有工作/学校帐户的客户也可以登录添加登录到.NET MVC Web应用程序.
Microsoft Account Authentication返回ProviderKey作为已登录用户的唯一ID.这将映射到我们的客户数据库中的UserId.
OpenId Connect似乎没有返回ProviderKey,但NameIdentifier看起来很有希望
ClaimsPrincipal.Current.FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier)?.Value;
是NameIdentifierOpenId Connect返回的用户的唯一标识符吗?是否可以可靠地用于随着时间的推移唯一地识别用户?
asp.net-identity azure-active-directory adal openid-connect azure-ad-msal
在System.IdentityModel.Claims中,存在三个条目:UPN,Name和NameIdentifier“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name ”“ http://schemas.xmlsoap.org/ ws / 2005/05 / identity / claims / upn “” http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier “
在使用AzureAD,OpenIdConnect和Office365进行身份验证之后进行调试时。我看到名称和upn始终相同,类似于给定用户的“电子邮件”:例如johndoe@contoso.com或johdoe@contoso.onmicrosoft.com,而nameidentifier是人类无法识别的标识符。
然后,我确实有几个问题:
1)在我的上下文中,“名称”和“ upn”是否始终相同?
2)它们是可变的吗?我们看到域名(或upn)中存在域名,这是否意味着如果rototo.com收购了contoso.com,则可以修改名称和upn?还是类似地,如果公司在没有自定义域名的情况下开始其Office365订阅,但后来他们决定一个人订阅?这些索赔的价值可能会发生变化?
3)与2)有关,但是NameIdentifier是获取对特定用户的引用的唯一安全方法吗?例如要作为外键存储在数据库中?
我为什么要这个?
我正在尝试从我的用户那里获取一个唯一的标识符,我可以将其连接到数据库记录.有理由我不想使用电子邮件作为标识符.我读到B2C不支持SUB声明,并在其中使用OID.
我采取的步骤
所以,我已经设置我的两个策略都返回Azure B2C上的对象ID:
我目前正在使用单独的SignIn和SignUp政策,我收到所有索赔,包括我指定要退回的电子邮件索赔.但是,我无法找到与OID或SUB相关的声明.
User.Claims
Run Code Online (Sandbox Code Playgroud)
让我得到以下结果:
我发现的单一面包屑希望就是这种说法:
键入:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
值:目前不支持.使用oid声明.
问题
我是否错过了为检索此特定声明而需要执行的其他步骤?
有没有人有成功从Azure B2C检索OID或SUB?
claims-based-identity openid-connect azure-ad-b2c asp.net-core