Qual é exatamente o parâmetro RelayState usado no SSO (ex. SAML)?
Leia por favor o seguinte de a documentação do Google Developer:
o Google gera um pedido de autenticação SAML. O pedido SAML é codificado e incorporado no URL para o serviço SSO do parceiro. O parâmetro RelayState que contém o URL codificado de a aplicação Google que o usuário está tentando alcançar também está incorporada no URL SSO. Este parâmetro do RelayState destina-se a ser um identificador opaco que é repassado sem qualquer modificação ou inspeção
3 answers
O significado original de {[[0]} é que o SP pode enviar algum valor ao IDP juntamente com o AuthnRequest
e depois recuperá-lo. O SP pode colocar o valor que quiser no {[[0]} e o PDI deve fazer eco de volta na resposta.
Este parâmetro
RelayState
destina-se a ser um identificador opaco que é repassado sem qualquer alteração ou inspecção
Existe também outro uso padrão de facto para {[[0]} quando se utiliza o log on iniciado pelo Idp. Nesse caso, não há nenhum pedido de entrada do SP, então não pode haver nenhum estado para ser retransmitido. Em vez disso, o RelayState
é usado pelo IDP para sinalizar para o SP qual o URL que o SP deve redireccionar para após o sinal de sucesso ligado. Isto não faz parte da norma SAML2.
Parece que o Google está a usar {[[0]} para o URL de destino, mesmo no sinal iniciado por SP, o que é perfeitamente normal. Mas o IDP deve, como diz a documentação, retransmiti-la.
O RelayState é um identificador para o recurso no SP para o qual o IDP irá redireccionar o Utilizador (após uma autenticação bem sucedida). É uma maneira de tornar o processo de SSO mais transitório para o usuário porque eles são redirecionados novamente para a mesma página que eles originalmente solicitaram no SP.
De acordo com o documento oficial SAML,
Algumas ligações definem um mecanismo "RelayState" para preservar e transmitir informações de Estado. Quando tal mecanismo é usado na transmissão de uma mensagem de pedido como o passo inicial de um protocolo SAML, impõe requisitos quanto à selecção e utilização da ligação posteriormente utilizada para transmitir a resposta. Nomeadamente, se uma mensagem de pedido SAML for acompanhada por dados RelayState, então o respondedor SAML Tenho de devolver o protocolo SAML. resposta usando uma ligação que também suporta um mecanismo de RelayState, e deve colocar os dados exactos do RelayState que recebeu com o pedido no correspondente RelayState parâmetro na resposta.