如何从Azure B2C获取ASPCore中的OID声明

Dav*_*res 4 claims-based-identity openid-connect azure-ad-b2c asp.net-core

我为什么要这个?

我正在尝试从我的用户那里获取一个唯一的标识符,我可以将其连接到数据库记录.有理由我不想使用电子邮件作为标识符.我读到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?

M-P*_*ror 16

如果您使用Microsoft.Identity.Web包,现在有一个 ClaimsPrincipalExtensions 类提供扩展方法,以便您可以简单地使用:

// using Microsoft.Identity.Web;

User.GetObjectId();
Run Code Online (Sandbox Code Playgroud)

这使用了oidorhttp://schemas.microsoft.com/identity/claims/objectidentifier声明。


Dav*_*res 8

嗯,这很尴尬,我必须看过这条线约30次并没有注意到......

我正在检索OID令牌,它的声明类型是:

http://schemas.microsoft.com/identity/claims/objectidentifier

从我提供的截图中可以清楚地看到.我会把这个问题留下来,因为架构可能会让别人失望.


小智 5

我为此挣扎了一段时间,这篇文章帮助了我。

要使用一些代码更新内容,下面将获取对象标识符值(Azure 中的唯一用户 ID)

User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value
Run Code Online (Sandbox Code Playgroud)

感谢您指出架构/类型的差异!