Azure Active Directory не выйдет из системы с помощью ASP.NET Core 2.1 MVC - PullRequest
3 голосов
/ 05 апреля 2019

У меня есть приложение ASP.NET Core 2.1 MVC, и я пытаюсь использовать Azure AD для аутентификации. Приложение перенаправляет на страницу входа Microsoft, но когда я выхожу, а затем возвращаюсь на домашнюю страницу приложения, оно автоматически снова входит в систему.

Я пытался позвонить https://login.microsoftonline.com/common/oauth2/v2.0/logout и очистить куки, но безрезультатно.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));

    services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
        {
            options.Authority = options.Authority + "/v2.0/";
            options.TokenValidationParameters.ValidateIssuer = false;
            options.Events.OnRedirectToIdentityProviderForSignOut = async context =>
            {
                var h = new HttpClient();
                var r = await h.GetAsync($"https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Flocalhost%2%3A5001%2F");

                foreach (var cookie in context.Request.Cookies.Keys)
                {
                    context.Response.Cookies.Delete(cookie);
                }
            };

            options.Events.OnTokenResponseReceived = async conext =>
            {
                var t = 1;
            };
        });

    services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

public async Task<IActionResult> Logout()
{
    var result =  SignOut("AzureAD", "AzureADOpenID", "AzureADCookie");
    return result;
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Пожалуйста, отметьте мой способ добавления аутентификации Azure AD в приложение ASP.NET Core 2.1 MVC. Инструмент добавит код аутентификации для вас. Вам нужно привязать кнопку входа / выхода к методу.

1.Нажмите «Подключенные службы» -> выберите «Аутентификация с помощью Azure Active Directory».

enter image description here

2.Вы должны предоставить кнопку входа для запуска страницы входа.

enter image description here

3.Введите имя своего арендатора для домена и выберите способ предоставления настроек приложения.

enter image description here

4. Нажмите кнопку Готово, чтобы завершить настройку.

5.Удалить app.UseBrowserLink() в Startup.cs.

6.Call SignOut() метод в AccountController.cs, чтобы выйти из системы. Хорошо работает.

[HttpGet]
        public IActionResult SignOut()
        {
            var callbackUrl = Url.Action(nameof(SignedOut), "Account", values: null, protocol: Request.Scheme);
            return SignOut(
                new AuthenticationProperties { RedirectUri = callbackUrl },
                CookieAuthenticationDefaults.AuthenticationScheme,
                OpenIdConnectDefaults.AuthenticationScheme);
        }
1 голос
/ 08 апреля 2019

Поскольку вы используете библиотеку Microsoft.AspNetCore.Authentication.AzureAD.UI, вы можете напрямую перенаправить пользователя на https://localhost:xxxxx/AzureAD/Account/SignOut для выхода, Исходный код :

[HttpGet("{scheme?}")]
public IActionResult SignOut([FromRoute] string scheme)
{
    scheme = scheme ?? AzureADDefaults.AuthenticationScheme;
    var options = Options.Get(scheme);
    var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);
    return SignOut(
        new AuthenticationProperties { RedirectUri = callbackUrl },
        options.CookieSchemeName,
        options.OpenIdConnectSchemeName);
}

Теперь вы можете удалить событие OnRedirectToIdentityProviderForSignOut.

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