当前位置: 首页 > 知识库问答 >
问题:

Azure B2C如何检索内置用户声明/属性

呼延弘方
2023-03-14

我正在尝试使用内置的用户属性和声明从Azure B2C检索一些非常基本的信息。

我只是想回来

  1. 姓名

使用下面的代码,我试图返回上述4个声明,但仅返回

  • UserId
  • 列表项正在通过。在这里输入图像描述

我已经使用了JWT. IO来测试返回令牌,我正在寻找的声明就在那里。

我希望不必单独调用图形应用编程接口来获得我想要的2-3个字段。

我只是希望有人能帮我澄清我的代码哪里出了问题。

    var claimsIdentity = (ClaimsIdentity)HttpContext.User.Identity;
    var userIdClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
    if (userIdClaim != null)
    {
        userId = userIdClaim.Value;
        ViewData["userId"] = userId;
    }
    var GivenNameClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == ClaimTypes.GivenName);
    if (GivenNameClaim != null)
    {
        GivenName = GivenNameClaim.Value;
        ViewData["GivenName"] = GivenName;
    }
    var SurNameClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == ClaimTypes.Surname);
    if (SurName != null)
    {
        SurName = SurNameClaim.Value;
        ViewData["Surname"] = SurName;
    }
    var EmailClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == ClaimTypes.Email);
    if (Email != null)
    {
        Email = EmailClaim.Value;
        ViewData["Email"] = Email;
    }

编辑

将以下内容添加到我的视图中有所帮助...

  @foreach (Claim claim in User.Claims)
    {
     <tr>
     <td>@claim.Type @claim.Subject</td>
     <td>@claim.Value</td>
     </tr>
    }

它返回

  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier6902e027-e475-447c-8f7d-75f4451f85a4
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname蒂姆
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname卡迪厄
  • 电子邮件me@email.com

因此,我已将我的电子邮件更新到belwo,它现在适用于3/4文件,它不会返回电子邮件集合。

var Claims = User.Claims;
var SurNameClaim = Claims.SingleOrDefault(c => c.Type == ClaimTypes.Surname);
ViewData["Surname"] = SurNameClaim.Value;

var GivenNameClaim = Claims.SingleOrDefault(c => c.Type == ClaimTypes.GivenName);
ViewData["GivenName"] = GivenNameClaim.Value;

var ClientIdClaim = Claims.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
ViewData["ClientId"] = ClientIdClaim.Value;

var EmailClaim = Claims.SingleOrDefault(c => c.Type == ClaimTypes.Email);
if (EmailClaim != null)
{
    ViewData["Email"] = EmailClaim.Value;
}
else
{
    ViewData["Email"] = "Is Null";
}

共有1个答案

宣煜
2023-03-14

用户属性是aad B2C从用户收集的信息。所以B2C只收集一封电子邮件,“电子邮件地址”是一个字符串。索赔是B2C返回给依赖方应用程序的信息。由于此处可能有多封电子邮件(来自多个资源,如联合Idp),因此这是一个集合。

您可以查看示例应用程序以了解如何解析声明https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi/blob/master/TaskService/Controllers/TasksController.cs

如何读取值为数组的声明

List<string> emails = new List<string>();
  IEnumerable<Claim> emailClaims =  Claims.Where(c => c.Type == ClaimTypes.Email);

                if (emailClaims.Any())
                {
                    // get the roles' actual value
                    foreach (Claim claim in emailClaims)
                    {
                        emails.Add(claim.Value);
                    }                   
                }
 类似资料:
  • 我正在使用maven项目进行UI自动化,我需要在多个环境和多个浏览器中运行一些测试。我已经创建并添加了pom.xml文件,并声明了其中的属性。但是当我通过终端执行它时,我得到了错误。我用的命令- 错误-[信息]扫描项目...[ERROR][ERROR]处理POM时遇到一些问题:[FATAL]不可解析POM d:\work\cucumber_projects\ui-automation-projec

  • 问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。

  • 我正在尝试从Twitter检索数据,使用Tweepy作为在命令行中键入的用户名。我想提取相当多关于状态和用户的数据,所以想出了以下内容: 请注意,我正在导入所有必需的模块,并且具有oauth键(只是此处未包含)并且文件名正确,刚刚更改: 我希望最终遍历用户的所有推文(最多3200条限制)。不过,首先要做的是。到目前为止,尽管我有两个问题,但我收到了以下关于转发的错误消息: 将用户名作为变量传递似乎

  • 问题内容: 我的Jenkins 2.19.4使用管道:声明式代理程序API 1.0.1。如果您无法定义变量来分配读取的属性,那么如何使用readProperties? 例如,要捕获SVN版本号,我目前以脚本样式使用以下代码捕获它: 然后我可以使用: 由于以声明式定义svnProp是不合法的,因此如何使用readProperties? 问题答案: 您可以使用标记内的步骤来运行任意管道代码。 所以符合

  • 问题内容: Java中的ArrayList或List声明质疑并回答了如何声明为空,但是如何声明带有值的ArrayList? 我尝试了以下操作,但返回语法错误: 问题答案: 在Java 9+中,您可以执行以下操作: Java 8使用: 当然,您可以使用接受一个的构造函数创建一个新对象: 提示:文档中包含非常有用的信息,这些信息通常包含您要查找的答案。例如,以下是该类的构造函数: 构造一个初始容量为1

  • 我遵循Microsoft的指导,通过Azure ADB2C启用Dynamics Portal访问。基础设施已经启动并运行良好。我使用的是"登录"政策。但是,我在声明映射功能上遇到了麻烦。 我已经根据下面链接的文档中的说明配置了以下站点设置。 身份验证/OpenIdConnect/B2C/RegistrationClaimsMapping身份验证/OpenIdConnect/B2C/LoginCla