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);
}
Другие вопросы по тегам