РЕДАКТИРОВАТЬ: Как указывает Крис Паджетт, это применимо только для предварительного заполнения адреса электронной почты вход , но необходимо было зарегистрироваться . Ответ Криса лучше для регистрации.
Если я правильно понимаю, ваше MVC-приложение является проверяющей стороной, которая перенаправляет на B2C для аутентификации, и вы хотите предварительно заполнить поле адреса электронной почты в B2C с помощьюадрес электронной почты, который вы собрали в приложении MVC.
Механизм, который вам нужен, - это OpenID Connect login_hint параметр строки запроса в запросе аутентификации, который отправляется конечной точке авторизации B2C.
B2C поддерживает этот параметр и предоставляет инструкции о том, как читать login_hint с пользовательской политикой.
Во время входа пользователя в систему приложение проверяющей стороны может предназначаться для конкретного пользователя или имени домена.При нацеливании на пользователя приложение может указать в запросе авторизации параметр запроса login_hint с именем пользователя для входа.Azure AD B2C автоматически заполняет имя для входа, в то время как пользователю нужно только ввести пароль.
Если вы используете настраиваемую политику, переопределите технический профиль SelfAsserted-LocalAccountSignin-Email.В разделе установите значение DefaultValue заявки signInName равным {OIDC: LoginHint}.Переменная {OIDC: LoginHint} содержит значение параметра login_hint.Azure AD B2C считывает значение утверждения signInName и предварительно заполняет текстовое поле signInName.
Я не знаю точно, как создается ваше приложение, но я предполагаю, что ваше приложение MVC похожев TaskWebApp, описанном в Быстрый запуск: настройка входа в приложение ASP.NET с помощью Azure Active Directory B2C .Если это так, вам нужно внести два изменения.
Во-первых, в вашем AccountController SignUpSignIn () методе (или где бы вы ни находились, у вас есть проверенный адрес электронной почты и вы готовы перенаправить его на B2C), вам нужно добавить адрес электронной почты кКонтекст OWIN.
public void SignUpSignIn()
{
if (!Request.IsAuthenticated)
{
var validatedEmailId = "emailaddress@example.com"; //read from form
HttpContext.GetOwinContext().Set("validatedEmail", validatedEmailId);
HttpContext.GetOwinContext().Authentication.Challenge();
return;
}
Response.Redirect("/");
}
Затем в вашем Startup.Auth.cs необходимо изменить обратный вызов OnRedirectToIdentityProvider (), чтобы прочитать адрес электронной почты из среды и использовать его в качестве LoginHint.значение.
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.ToLower().Replace(DefaultPolicy.ToLower(), policy.ToLower());
}
else //default, sign-in/sign-up
{
notification.ProtocolMessage.LoginHint =
notification.OwinContext.Get<string>("validatedEmail");
}
return Task.FromResult(0);
}