Проблема
Я пытаюсь реализовать вход и вход с использованием внешнего IDP в приложении .Net 8 с SustaSysys .Saml2.aspnetCore2 (версия = 2.10.0) .
[*] login отлично работает. < /li>
ряд также работает , но после входа в систему пользователь перенаправляется на /самл2/logout.
Проблема: /saml2/logout возвращает 404 , и хотя я создал метод действия в этой конечной точке, запрос, похоже, перехвачен промежуточным программным обеспечением.
< /ul>
конфигурация в startup.cs < /strong> < /p>
var saml2Options = Configuration.GetSection("Authentication:Saml2").Get();
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = Saml2Defaults.Scheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddSaml2(options =>
{
options.SPOptions.EntityId = new EntityId(saml2Options.EntityId);
LoadCertificate(options, saml2Options.Certificate);
options.IdentityProviders.Add(new IdentityProvider(
new EntityId(saml2Options.IdentityProvider.EntityId),
options.SPOptions)
{
MetadataLocation = saml2Options.IdentityProvider.MetadataLocation,
LoadMetadata = true
});
});
< /code>
Метод действий в журнале < /strong>
Этот метод инициирует федеративный журнал, отправляя SAML Logoutrequest. < /p>
[HttpPost]
public IActionResult ExecuteLogout()
{
var props = new AuthenticationProperties
{
RedirectUri = "/"
};
var user = HttpContext.User;
var sessionIndex = user.FindFirst(Saml2ClaimTypes.SessionIndex)?.Value;
if (!string.IsNullOrEmpty(sessionIndex))
{
props.Items.Add(Saml2ClaimTypes.SessionIndex, sessionIndex);
}
var logoutNameIdentifier = user.FindFirst(Saml2ClaimTypes.LogoutNameIdentifier)?.Value;
if (!string.IsNullOrEmpty(logoutNameIdentifier))
{
props.Items.Add(Saml2ClaimTypes.LogoutNameIdentifier, logoutNameIdentifier);
}
return SignOut(props, Saml2Defaults.Scheme);
}
попытка исправить: Создание действия для/saml2/logout
, даже если я создал явный метод контроллера для обработки/SAML2/ Выход, он никогда не вызывается .
[AllowAnonymous]
[Route("Saml2")]
public class LoggedOutController : Controller
{
private readonly ILogger logger;
private readonly Saml2Settings samlSettings;
public LoggedOutController(ILogger logger, IOptions samlSettingsOptions)
{
this.logger = logger;
this.samlSettings = samlSettingsOptions.Value;
}
[AllowAnonymous]
[HttpGet("Logout")]
public IActionResult Logout([FromQuery] string SAMLResponse)
{
logger.LogInformation($"User logged out. Saml response: {SAMLResponse}");
return View("Logout");
}
}
Любой совет был бы очень признателен! Br />private static void LoadCertificate(Saml2Options options, CertificateSettings certSettings)
{
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
try
{
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates.Find(
X509FindType.FindBySubjectName, certSettings.SubjectName, false);
if (certificates.Count > 0)
{
options.SPOptions.ServiceCertificates.Add(certificates[0]);
}
else
{
throw new InvalidOperationException("Required certificate not found.");
}
}
finally
{
store.Close();
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... eturns-404
SustaSySys.SAML2 перенаправления в /saml2 /logout, но промежуточное программное обеспечение возвращает 404 ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение