Pergunta

Todos os provedores de OAuth com quem eu autentiquei redirecionarão você para uma página que diz algo como "Obrigado, redirecionando você ..." e usa JavaScript para redirecioná -lo para o Redirect_uri fornecido. Eu teria pensado que era mais simples e rápido retornar um redirecionamento HTTP. Por que sempre é feito dessa maneira?

Foi útil?

Solução

Cabeçalho de localização de 302 de acordo com HTTP 1.1 se parece com isso:

Location       = "Location" ":" absoluteURI

absoluteURI de acordo com Sintaxe genérica URI não inclui identificador de fragmento. Aquele com o fragmento é chamado URI-reference:

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]   

O detalhe é descrito na pergunta de @Levik: Fragmento de URL e 302 redirecionamentos. Agora estou aprendendo da maneira mais difícil, mas a essência é que 302 com fragmento não parece funcionar com o IE8.

O uso do JavaScript provavelmente é uma maneira mais confiável, porque você deve passar os tokens de acesso por fragmento.

Editar: Agora sei o que aconteceu com o IE8. O IE respeita o identificador de fragmento no cabeçalho da localização, mas ignora o do URI de origem. Meu URL de redirecionamento era para http://example.com/oauth, que eu tive um redirecionamento automático para https, https://example.com/oauth.

  1. Oauth redireciona para http://example.com/oauth#access_token=foo.
  2. Meu servidor redireciona para https://example.com/oauth.

Entre a etapa 1 e 2, o IE8 jogou fora o identificador de fragmento, enquanto alguns dos outros navegadores foram redirecionados para https://example.com/oauth#access_token=foo.

Portanto, a resposta real é 302 está ok, desde que você não a use mais de uma vez no URL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top