Есть ли способ аутентификации приложения B2C с использованием нескольких политик - PullRequest
0 голосов
/ 02 апреля 2019

Я использую страницу входа B2C для аутентификации моих пользователей. Эти пользователи имеют несколько IDP по своему выбору в соответствии с их бизнесом, и я создал несколько политик с выбранными IDP. На странице входа в систему, основанной на электронной почте пользователя, я отображаю его страницу входа, на которой есть только его соответствующие ВПЛ. Но в моем веб-приложении я могу добавить один Регистрация или политика входа в систему в моем appsettings.json для аутентификации пользователя. Есть ли возможность иметь несколько политик в файле appsettings.json или любой другой способ справиться с этим требованием

Мой текущий appsettings.json выглядит ниже

"AzureAdB2C": {
"Instance": "https://login.microsoftonline.com/tfp/",
"ClientId": "******-***-****-****-*******",
"Domain": "mycustomdomain.onmicrosoft.com",
"SignUpSignInPolicyId": "Org-signinsignout"

},

1 Ответ

0 голосов
/ 03 апреля 2019

Вы можете вызвать другую политику для пользователя другого типа, передав запрашиваемую политику из метода контроллера в промежуточное ПО аутентификации :

  public IActionResult LogInForBusinessCustomer(string uiLocale)
        {
            return LogInFor(Constants.AuthenticationSchemes.B2COpenIdConnect, Constants.Policies.SignUpOrSignInWithWorkAccount, uiLocale);
        }

    public IActionResult LogInForIndividualCustomer(string uiLocale)
    {
        return LogInFor(Constants.AuthenticationSchemes.B2COpenIdConnect, Constants.Policies.SignUpOrSignInWithPersonalAccount, uiLocale);
    }

    public IActionResult LogInForPartner(string uiLocale)
    {
        return LogInFor(Constants.AuthenticationSchemes.B2BOpenIdConnect, null, uiLocale);
    }

private IActionResult LogInFor(string authenticationScheme, string policy)
{
    if (!User.Identity.IsAuthenticated)
    {
        return new ChallengeResult(
            authenticationScheme,
            new AuthenticationProperties(
                new Dictionary<string, string>
                {
                    {Constants.AuthenticationProperties.Policy, policy}
                })
            {
                RedirectUri = Url.Action("LoggedIn", "Account", values: null, protocol: Request.Scheme)
            });
    }

    return RedirectToHome();
}

, а затем задайте URL-адрес перенаправления для запрошенной политики в промежуточном программном обеспечении аутентификации:

OnRedirectToIdentityProvider = async context =>
            {
                var policy = context.Properties.Items.ContainsKey(Constants.AuthenticationProperties.Policy) ? context.Properties.Items[Constants.AuthenticationProperties.Policy] : Constants.Policies.SignUpOrSignInWithPersonalAccount;
                var configuration = await GetB2COpenIdConnectConfigurationAsync(context, policy);
                context.ProtocolMessage.IssuerAddress = configuration.AuthorizationEndpoint;

                if (context.Properties.Items.ContainsKey(Constants.AuthenticationProperties.UILocales))
                {
                    context.ProtocolMessage.SetParameter("ui_locales", context.Properties.Items[Constants.AuthenticationProperties.UILocales]);
                }

                context.ProtocolMessage.SetParameter("dc", "cdm");
                context.ProtocolMessage.SetParameter("slice", "001-000");
            },

Ссылка: https://github.com/Azure-Samples/active-directory-external-identities-woodgrove-demo/blob/2b5110c25d1a626bf9b9ac27ecaaabad8b4bccf4/src/WoodGroveGroceriesWebApplication/Startup.cs#L283

Также, пожалуйста, проверьте эту тему

Azure B2C - Настройка одного приложения с несколькими входами в систему для разных типов пользователей в Azure

Надеюсь, это поможет.

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