В моей реализации ADFS Asp. net 2.1, GetExternalLoginInfoAsyn c в контроллере моей учетной записи всегда возвращает ноль - PullRequest
1 голос
/ 16 апреля 2020

Когда пользователь проходит через поток ADFS, и я получаю обратный вызов к моему / account / externalLogin в моем контроллере учетной записи. Строка: var info = await _signInManager.GetExternalLoginInfoAsync(); всегда устанавливает информацию в нуль.

Это касается как нашего внутреннего тестового экземпляра adfs, так и нашего клиентского тестового экземпляра. (Этот проект должен добавить поддержку SSO нашему клиенту)

Код ниже взят из моего контроллера учетной записи и вызывается после того, как пользователь проходит через поток adfs. Оператор if info == null всегда верен, и мы перенаправляем их на страницу справки в качестве места тестирования.

    [HttpGet]
    [AllowAnonymous]
    public async Task<IActionResult> ExternalLogin(string returnUrl = null, string page = null, string handler = null, string remoteError = null)
    {
        // Catches the first get request from someone returning from external login
        Console.WriteLine("Login event!!!");

        if (remoteError != null)
        {
            ViewBag.ErrorMessage = $"Error from external provider: {remoteError}";
            Console.WriteLine($"Error from external provider: { remoteError}");
            return RedirectToAction("Help", "Home");
        }
        var info = await _signInManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            Console.WriteLine("no info, retrying");
            return RedirectToAction("Help", "Home");
        }

Соответствующий раздел из моего файла startup.cs:

services.AddAuthentication()
        .AddWsFederation(options =>
        {
            // MetadataAddress represents the Active Directory instance used to authenticate users.
            options.MetadataAddress = "https://adfsqa.client.com/FederationMetadata/2007-06/FederationMetadata.xml";
            //options.MetadataAddress = "https://ourtestadfsinstance.westus2.cloudapp.azure.com/FederationMetadata/2007-06/FederationMetadata.xml";

            // Wtrealm is the app's identifier in the Active Directory instance.
            // For ADFS, use the relying party's identifier, its WS-Federation Passive protocol URL:
            options.Wtrealm = "https://rc.dm1.tech";

        });

Моя реализация очень проста и закройте стандартный пример реализации ADFS, задокументированный здесь, Детали реализации также были взяты из этого образца из примера проекта репо ASP. net core git для ExternalClaims здесь .

Я много раз искал эту проблему и потратил несколько дней, пытаясь решить ее на этом этапе. Ближайшая публикация c этой проблемы, похоже, это один , но большинство других посвящено развертыванию Oauth2 из Steam, Instagram или любой другой третьей стороны.

Любые подсказки, советы или даже мысли будут с благодарностью.

...