Интеграция входа с Azure Active Directory в. Net Core - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь интегрировать параметр входа через Azure Active Directory с основным приложением. net. Я прошел через блоги Microsoft и прошел этапы, когда пользователь может войти в систему с учетной записью Microsoft. Но ПРОБЛЕМА

«Он всегда перенаправляет меня к методу действия входа». который возвращает меня к экрану входа.

Изображение для URL перенаправления: enter image description here

Мой класс запуска

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie()
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));
            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.Authority = options.Authority + "/v2.0/";


                options.TokenValidationParameters.ValidateIssuer = false;

            });

Моя учетная запись для входа контроллер

[HttpGet]
        [AllowAnonymous]
        public async Task<IActionResult> Login(string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
                return RedirectToAction("Index", "Search");

            var domainInfo = await _subdomainProvider.GetDomainInfoAsync(Request.Host.Value);
            if (domainInfo.LoginMethod == LoginMethod.AzureAD)
            {
                var redirectUrl = Url.Action("Index", "Search");
                var properties = _signInManager
                    .ConfigureExternalAuthenticationProperties(LoginMethod.AzureAD.ToString(), redirectUrl);
                return new ChallengeResult(LoginMethod.AzureAD.ToString(), properties);

            }
            else
            {
                ViewBag.ReturnUrl = returnUrl;
                ViewBag.Background = await GetRandomBackgroundAsync(domainInfo.LoginBackgrounds);
            }


            return View(new LoginModel
            {
                Language = GetLanguage(),
                ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList()
            });
        }

Вид входа в систему

<form method="post" asp-controller="Account" asp-action="SignIn" asp-route-returnUrl="@Model.ReturnUrl">
        <h2>@AccountStrings.Login_ExternalLogin_Title</h2>
        <div>

            @foreach (var provider in Model.ExternalLogins)
            {
                <button type="submit" class="btn  login-provider @provider.DisplayName"
                        name="provider" value="@provider.Name"
                        title="Log in using your @provider.DisplayName account">
                    @provider.DisplayName
                </button>
            }
        </div>
    </form>

Даже добавлен URL-адрес перенаправления на портале azure для перенаправления в метод действия, т.е. dashboard.but по-прежнему не работает.

Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Кажется, вы используете ASP. NET Core Identity с Azure AD логином. Если это ваш сценарий, вы можете установить CookieSchemeName на Identity.External, чтобы asp. net идентификатор ядра мог получить внешний профиль пользователя от внешнего поставщика идентификаторов:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

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;

});

Azure Настройка приложения AD:

    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "xxx.onmicrosoft.com",
        "TenantId": "xxxxxx-xxxxx-4f08-b544-b1eb456f228d",
        "ClientId": "xxxxx-xxxxx-4717-9821-e4f718fbece4",
        "CallbackPath": "/signin-oidc",
        "CookieSchemeName": "Identity.External"
    },
0 голосов
/ 28 января 2020

Насколько я понимаю, вы хотите интегрировать Azure AD с вашим основным веб-приложением. net. Если да, обратитесь к документу и статье

  1. appsettings. json file
"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "<you tenant doamin>",
    "TenantId": "<>",
    "ClientId": "<>",
    "CallbackPath": "/signin-oidc"
Добавьте следующий код в файл startup.cs
  services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));
            //services.Configure<AzureADOptions>(options => Configuration.Bind("AzureAd", options));
            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.Authority = options.Authority + "/v2.0/";
                options.TokenValidationParameters.ValidateIssuer = false;
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...