Когда пользователь проходит через поток 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 или любой другой третьей стороны.
Любые подсказки, советы или даже мысли будут с благодарностью.