Аутентификация веб-форм с помощью B2C

Я пытаюсь добавить аутентификацию с помощью Azure AD B2C в приложение веб-форм. К сожалению, все учебники, которые я нашел, предназначены для MVC, за исключением это руководство по веб-формам. Используя этот учебник, я добавил этот код в свой файл startup.auth.cs:

public partial class Startup {

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883
    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = "my-client-id",
                Authority = "https://login.microsoftonline.com/my-tenant"
            });
    }
}

И это работает нормально. Однако мне нужна функция регистрации, а также просто вход в систему, но я не могу понять, как это сделать, поскольку все, что я нашел, предназначено для MVC, и я не уверен, как преобразовать это в Что мне нужно. Я пробовал добавлять такой код:

app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(_SignUpPolicyId));
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(_ProfilePolicyId));
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(_SignInPolicyId));

И это создает еще три кнопки на странице входа, но нажатие на них просто дает ошибку 404 и никакой дополнительной информации, поэтому я тоже не знаю, как заставить это работать, или даже если я иду в правильном направлении. . Я никогда раньше не работал с B2C, поэтому, если у кого-то есть какие-либо предложения/сделал что-то подобное для веб-форм, я был бы очень признателен за некоторые советы или примеры кода.


person issharp    schedule 01.08.2016    source источник


Ответы (1)


Пример, который вы используете, использует «Локальные учетные записи» введите здесь описание изображения

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

Попробуйте изменить аутентификацию на «Без аутентификации» (и добавьте все файлы самостоятельно) или «Рабочие и учебные учетные записи» (которые подключаются к AD, поэтому преобразуйте это в B2C).

Вы увидите перенаправление на https://login.microsoftonline.com/yourtenant.onmicrosoft.com/....

Следующие шаги состоят в том, чтобы выполнить те же шаги, что и в примере с MVC, реализовать те же фрагменты кода.

Обязательно обновите пакеты nuget до более новой версии (по умолчанию 1.0 и 4.0):

<package 
    id="Microsoft.IdentityModel.Protocol.Extensions"
    version="1.0.2.206221351" 
    targetFramework="net46" />
<package 
    id="System.IdentityModel.Tokens.Jwt" 
    version="4.0.2.206221351" 
    targetFramework="net46" />

И код:

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(signInPolicyId));
    }

 private OpenIdConnectAuthenticationOptions CreateOptionsFromPolicy(string policy)
    {

        return new OpenIdConnectAuthenticationOptions
        {
            MetadataAddress = string.Format(aadInstance, tenant, policy),
            AuthenticationType = policy,

            ClientId = clientId,
            RedirectUri = "https://localhost:44300/",
            PostLogoutRedirectUri = redirectUri,
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
            },

            Scope = "openid",
            ResponseType = "id_token",

            TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = "name",
            },
        };
    }

Добавьте страницу /Account/SignIn.aspx, а в коде поместите код из примера SignIn MVC:

 if (!Request.IsAuthenticated)
        {                
            // To execute a policy, you simply need to trigger an OWIN challenge.
            // You can indicate which policy to use by adding it to the AuthenticationProperties using the
            // PolicyKey provided.
            HttpContext.Current.GetOwinContext().Authentication.Challenge(
                new AuthenticationProperties()
                {
                    RedirectUri = "/",
                },
                appConfiguration.B2CSignInPolicyId);
        }
person Erik Oppedijk    schedule 02.08.2016
comment
В итоге я переключил проект на MVC, потому что все остальные наши сайты сделаны с MVC, поэтому мы решили, что и этот должен быть таким же. Итак, я на самом деле не проверял ваш ответ, так как он больше не актуален, но я ценю, что вы нашли время, поэтому я все равно соглашусь, чтобы вопрос был решен. Спасибо! - person issharp; 03.08.2016
comment
Я ценю комментарий - person Danrex; 04.10.2016