我为什么想要这个?
我正在尝试从我的用户那里获取一个唯一的标识符,我可以将其连接到数据库记录。我不想使用电子邮件作为标识符是有原因的。我读到B2C不支持子声明,并在它所在的地方使用OID。
我已经采取的步骤
所以,我已经设置了我的两个策略都在Azure B2C上返回对象ID:
我目前使用的是单独的SignIn和SignUp保单,我得到了所有的索赔,包括我指定的我想要退还的电子邮件索赔。然而,我找不到与OID或SUB相关的索赔。
User.Claims
我得到了以下结果:
我找到的唯一的希望就是这样的说法:
类型:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
值:暂时不支持。使用旧声明。
问题
我是否遗漏了检索此特定申请所需执行的其他步骤?
有没有人成功地从Azure B2C检索到了OID或SUB?
发布于 2016-08-16 23:22:46
嗯,这太尴尬了,我肯定已经看了这行大约30次了,都没有注意到……
我正在检索OID令牌,它的声明类型是:
http://schemas.microsoft.com/identity/claims/objectidentifier
在我提供的截图中可以清楚地看到。我将把这个问题留下来,因为模式可能会让其他人失去兴趣。
发布于 2019-08-14 03:06:35
我在这一点上挣扎了一段时间,这篇文章帮助了我。
为了使用一些代码更新内容,下面将获取对象标识符值(Azure中的唯一用户id )
User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value
感谢您指出模式/类型之间的差异!
发布于 2018-06-23 00:19:31
由于上面的链接被破坏了,这是我努力寻找的工作示例,下面是我最终使用的代码片段;
using System.IdentityModel.Tokens.Jwt;
...
string oid;
string pTokenInput = Request.Headers["x-ms-token-aad-id-token"].ToString();
var lJWTHandler = new JwtSecurityTokenHandler();
if (lJWTHandler.CanReadToken(pTokenInput)
{
var lToken = lJWTHandler.ReadJwtToken(pTokenInput);
if (lToken.Payload.ContainsKey("oid"))
oid = lToken.Payload["oid"].ToString();
}
希望这能帮助到其他人。
https://stackoverflow.com/questions/38978403
复制相似问题