Я использую IdentityServer4 с двумя внешними Idp, один с WSFederation (ADFS) и один с SAML.
Для реализации SAML я использую коммерческий продукт ComponentSpace SAML 2 для ASP.Net Core.Я использую конфигурацию на основе промежуточного программного обеспечения.
Ведение журнала с обоими работами Idp идеально, но теперь у меня есть ситуация, когда, в зависимости от клиента, мне нужно передать дополнительные параметры в SAML AuthnRequest.Я знаю, как передать этот дополнительный параметр в запросе (я могу использовать OnAuthnRequest, созданный из промежуточного программного обеспечения), но я не знаю, как проверить в тот момент, откуда поступает запрос, то есть с какого клиента.
У меня есть контроль над клиентом, поэтому я также мог передать дополнительные acr_values (которые, я думаю, можно использовать для передачи пользовательских данных), но опять же я не знаю, как получить их в событии OnAuthnRequestCreated, как показано в кодениже.
Любая помощь будет высоко ценится.
services.AddSaml(Configuration.GetSection("SAML"));
services.AddAuthentication()
.AddWsFederation("adfs", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
//...rest of config (SSO is working)
})
.AddSaml("saml", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
//...rest of config (SSO is working)
options.OnAuthnRequestCreated = request =>
{
//Here I would need to know from which client the request is coming (either by client name or url or acr_values or whatever)
//to be able to perform conditional logic. I've checked on the request object itself but the info is not in there
return request;
};
});