我正在为我的MVC Web应用程序使用Azure AD B2C身份验证。我已经开发了该项目的登录部分。现在,我希望在用户登录Web应用程序时获取用户的详细信息。我看过一些解释如何编辑用户详细信息的文章。但我找不到与获取用户个人资料数据相关的任何内容。请帮助。
这是我的SignIn行动。
celery.task.updateServerByID
答案 0 :(得分:0)
您有两种选择:
选项1,首选 - 使用Azure AD B2C的编辑配置文件功能
在调用Azure AD B2C时添加logic on the RedirectToIdentityProvider handler以覆盖策略
/*
* 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);
}
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 :(得分: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
}