Autenticação SAML #4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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)
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.