如何在azure ad b2c中获取用户个人资料详细信息

时间:2017-05-09 06:53:28

标签: asp.net-mvc azure-ad-b2c

我正在为我的MVC Web应用程序使用Azure AD B2C身份验证。我已经开发了该项目的登录部分。现在,我希望在用户登录Web应用程序时获取用户的详细信息。我看过一些解释如何编辑用户详细信息的文章。但我找不到与获取用户个人资料数据相关的任何内容。请帮助。

这是我的SignIn行动。

celery.task.updateServerByID

2 个答案:

答案 0 :(得分:0)

您有两种选择:

选项1,首选 - 使用Azure AD B2C的编辑配置文件功能

  1. Create an Edit Profile Policy

  2. 在调用Azure AD B2C时添加logic on the RedirectToIdentityProvider handler以覆盖策略

  3.     /*
         *  On each call to Azure AD B2C, check if a policy (e.g. the profile edit or password reset policy) has been specified in the OWIN context.
         *  If so, use that policy when making the call. Also, don't request a code (since it won't be needed).
         */
        private Task OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
        {
            var policy = notification.OwinContext.Get<string>("Policy");
    
            if (!string.IsNullOrEmpty(policy) && !policy.Equals(DefaultPolicy))
            {
                notification.ProtocolMessage.Scope = OpenIdConnectScopes.OpenId;
                notification.ProtocolMessage.ResponseType = OpenIdConnectResponseTypes.IdToken;
                notification.ProtocolMessage.IssuerAddress = notification.ProtocolMessage.IssuerAddress.Replace(DefaultPolicy, policy);
            }
    
            return Task.FromResult(0);
        }
    
    1. 创建EditProfile controller action,确保它指示应使用EditProfilePolicy:
    2.     public void EditProfile()
          {
              if (Request.IsAuthenticated)
              {
                  // Let the middleware know you are trying to use the edit profile policy (see OnRedirectToIdentityProvider in Startup.Auth.cs)
                  HttpContext.GetOwinContext().Set("Policy", Startup.EditProfilePolicyId);
      
                  // Set the page to redirect to after editing the profile
                  var authenticationProperties = new AuthenticationProperties { RedirectUri = "/" };              HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);
                  return;
              }
              Response.Redirect("/");
          }
      

      选项2 - 实施您自己的编辑个人资料屏幕和体验 我不会详细介绍这个选项,因为这个版本非常冗长,但是你需要在以下的高水平:

      1. 实施您自己的屏幕
      2. 实施您自己的Azure AD B2C保护的API(意味着它需要和Azure AD B2C访问令牌)并拥有此API use Client Credentials to update the user in question

答案 1 :(得分:0)

在B2C政策中,您需要添加声明。

选择政策 - &gt;编辑 - &gt;申请权利要求 - &gt;选择你想要的 - &gt;保存。

当用户登录时,这些将被添加到他们的令牌中。然后,您可以在登录后在代码中枚举它们:

var claimsIdentity = (System.Security.Claims.ClaimsIdentity)User.Identity;
foreach (var claim in claimsIdentity.Claims)
{
     // do stuff with claim.Type & claim.Value
}