Autenticação SAML #4

Closed
opened 2025-05-23 17:35:19 +01:00 by root · 1 comment
Owner

Ao fazer testes com o IDP da NOVA (FCCN), obtive o erro:
Valid InResponseTo was not available from the validation context, unable to evaluate SubjectConfirmationData@InResponseTo

Isto é uma validação standard implementada pelo SpringSecurity SAML. No SAML Request está a ser enviado um AuthnRequest com ID. É esperado que a Response contenha um SubjectConfirmationData.InResponseTo, mas não tem. Daí o erro apresentado.

Sendo isto uma Response válida para o IDP, vou considerar que é para desligar.

saml2Login() .relyingPartyRegistrationRepository(...) .authenticationManager(...) .successHandler(...) .failureHandler(...) .authenticationRequestContextConsumer(context -> { context.setCheckInResponseTo(false); // WARNING: Only if you understand the risks });

O que vou fazer, é adicionar uma nova propridade à configuração na application.yml.

NOTA: Em anexo, encontra-se o SAML Response do IDP (após uma autenticação com sucesso no IDP, mas que deu este erro)

Ao fazer testes com o IDP da NOVA (FCCN), obtive o erro: `Valid InResponseTo was not available from the validation context, unable to evaluate SubjectConfirmationData@InResponseTo` Isto é uma validação standard implementada pelo SpringSecurity SAML. No SAML Request está a ser enviado um AuthnRequest com ID. É esperado que a Response contenha um SubjectConfirmationData.InResponseTo, mas não tem. Daí o erro apresentado. Sendo isto uma Response válida para o IDP, vou considerar que é para desligar. `saml2Login() .relyingPartyRegistrationRepository(...) .authenticationManager(...) .successHandler(...) .failureHandler(...) .authenticationRequestContextConsumer(context -> { context.setCheckInResponseTo(false); // WARNING: Only if you understand the risks });` O que vou fazer, é adicionar uma nova propridade à configuração na application.yml. NOTA: Em anexo, encontra-se o SAML Response do IDP (após uma autenticação com sucesso no IDP, mas que deu este erro)
root added the
enhancement
label 2025-05-23 17:35:19 +01:00
root added this to the InNOVA project 2025-05-23 17:35:19 +01:00
Author
Owner

Na verdade o problema não estava no InResponseTo. O SAML2 XML Response contém o InResponseTo e o SpringSecurity SAML valida.
Concluí que o problema é que o SpringSecurity estava a perder o SAMLRequest ID entre chamadas. By default, o SpringSecurity guarda o request inMemory, mas julgo que está a acontecer um novo request ao servidor após o envio SAML, e isso faz limpar o SAML Request inmemory.
O que fiz foi na prática o mesmo, mas com um AuthRepository próprio. Ainda tentei a implementação de persistência em base de dados, mas o SpringSecurity SAML não suporta isso (embora diga que sim). Com isto, a autenticação por SAML e passou a ser coerente.

Na verdade o problema não estava no InResponseTo. O SAML2 XML Response contém o InResponseTo e o SpringSecurity SAML valida. Concluí que o problema é que o SpringSecurity estava a perder o SAMLRequest ID entre chamadas. By default, o SpringSecurity guarda o request inMemory, mas julgo que está a acontecer um novo request ao servidor após o envio SAML, e isso faz limpar o SAML Request inmemory. O que fiz foi na prática o mesmo, mas com um AuthRepository próprio. Ainda tentei a implementação de persistência em base de dados, mas o SpringSecurity SAML não suporta isso (embora diga que sim). Com isto, a autenticação por SAML e passou a ser coerente.
root closed this issue 2025-06-03 19:53:20 +01:00
root added this to the 1.0.2 milestone 2025-06-06 14:58:50 +01:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: root/resilient#4
No description provided.