Передать значения полей из приложения mvc в b2c. - PullRequest
0 голосов
/ 11 октября 2018

У меня есть поле электронной почты в моем приложении MVC.После того, как пользователь получил идентификатор электронной почты, мы проводим проверку и должны передать тот же идентификатор электронной почты в политику регистрации Azure B2C.Для этого я создал собственную политику.Может ли любое тело помочь мне, как я могу этого достичь.

This is my mvc registration page filed

This is my Azure B2C sign up page filed

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

См. Другой ответ на здесь , чтобы узнать, как это можно реализовать с помощью настраиваемой политики.

Требуется, чтобы адрес электронной почты передавался в качестве входной заявки от приложения проверяющей стороны внастраиваемая политика в JWT, подписанная с помощью секретного ключа приложения проверяющей стороны.

Рабочий пример этого здесь .

0 голосов
/ 27 июня 2019

Мне удалось сделать это с помощью настраиваемой политики B2C.

У меня был предопределенный атрибут расширения с именем registrationNumber, который я хотел предварительно заполнить в своей политике SignUp. Вот как создать пользовательский атрибут.

Я добавил регистрационный номер в качестве ContentDefinitionParameter в Политика регистрации .

  <ContentDefinitionParameters>
    <Parameter Name="registrationNumber">{OAUTH-KV:registrationNumber}</Parameter>
  </ContentDefinitionParameters>

Все еще в Политика регистрации , я добавил выводную заявку для атрибута расширения.

<OutputClaim ClaimTypeReferenceId="extension_RegistrationNumber" AlwaysUseDefaultValue="true" DefaultValue="{OAUTH-KV:registrationNumber}"/>

Затем в приложении MVC я добавляю параметр для перенаправления. OnRedirectToIdentityProvider (RedirectToIdentityProviderNotification уведомление)

notification.ProtocolMessage.Parameters.Add("registrationNumber", registrationNumber);
0 голосов
/ 11 октября 2018

РЕДАКТИРОВАТЬ: Как указывает Крис Паджетт, это применимо только для предварительного заполнения адреса электронной почты вход , но необходимо было зарегистрироваться . Ответ Криса лучше для регистрации.

Если я правильно понимаю, ваше 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...