SAML2.0 токен доступа с использованием itfoxtec-identity-saml2
Я пытаюсь использовать ваш пакет Nuget для ядра сети Dotnet, но получаю небольшой успех. Я также могу войти в систему провайдеров идентификации SAML, таких как Onelogin,Okta, и я также получил информацию о пользователях входа в систему. провайдеров идентификации SAML). Как я получу этот токен?
Я могу видеть объект securitytoken в saml2AuthnResponse, но не знаю, как с этим токеном, и в этом ключе защиты объекта и единственном ключе нет значения.
Я совершенно новичок в этом, так что, может быть, я что-то неправильно понял.
Пожалуйста, помогите мне.
[Route("AssertionConsumerService")]
public async Task<IActionResult> AssertionConsumerService()
{
var binding = new Saml2PostBinding();
var saml2AuthnResponse = new Saml2AuthnResponse(config);
binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse);
if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
{
throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
}
binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);
await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: (claimsPrincipal) => ClaimsTransform.Transform(claimsPrincipal));
var relayStateQuery = binding.GetRelayStateQuery();
var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
return Redirect(returnUrl);
}
1 ответ
Вы можете получить доступ к токену SAML 2.0 в виде строки XML, установив Saml2Configuration.SaveBootstrapContext = true
в appsettings.json:
...
"Saml2": {
"SaveBootstrapContext": true,
"IdPMetadata": "https://localhost:44305/metadata",
"Issuer": "itfoxtec-testwebappcore",
...
}
В качестве альтернативы вы можете установить конфигурацию в коде:
config.SaveBootstrapContext = true;
Затем вы можете прочитать токен SAML 2.0 в виде строки XML в saml2AuthnResponse.ClaimsIdentity.BootstrapContext
:
public async Task<IActionResult> AssertionConsumerService()
{
var binding = new Saml2PostBinding();
var saml2AuthnResponse = new Saml2AuthnResponse(config);
binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse);
if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
{
throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
}
binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);
await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: (claimsPrincipal) => ClaimsTransform.Transform(claimsPrincipal));
var samlTokenXml = saml2AuthnResponse.ClaimsIdentity.BootstrapContext as string;
var relayStateQuery = binding.GetRelayStateQuery();
var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
return Redirect(returnUrl);
}