Não sei se tenho algum tipo de ponto cego ou o quê, mas li as especificações do OAuth 2 várias vezes e examinei os arquivos da lista de discussão, e ainda não encontrei uma boa explicação sobre por que a concessão implícita foi desenvolvido um fluxo para obter tokens de acesso. Comparado com o código de autorização concedido, parece desistir da autenticação do cliente sem um motivo muito convincente. Como isso é "otimizado para clientes implementados em um navegador usando uma linguagem de script" (para citar a especificação)?
Ambos os fluxos começam da mesma forma (fonte: http://tools.ietf.org/html/draft-ietf-oauth-v2-22 ):
- O cliente inicia o fluxo direcionando o agente do usuário do proprietário do recurso para o terminal de autorização.
- O servidor de autorização autentica o proprietário do recurso (por meio do agente do usuário) e estabelece se o proprietário do recurso concede ou nega a solicitação de acesso do cliente.
- Supondo que o proprietário do recurso conceda acesso, o servidor de autorização redireciona o agente do usuário de volta ao cliente usando o URI de redirecionamento fornecido anteriormente (na solicitação ou durante o registro do cliente).
- O URI de redirecionamento inclui um código de autorização (fluxo de código de autorização)
- O URI de redirecionamento inclui o token de acesso no fragmento de URI (fluxo implícito)
Aqui é onde os fluxos se dividem. Nos dois casos, o URI de redirecionamento neste momento é para algum terminal hospedado pelo cliente:
- No fluxo do código de autorização, quando o agente do usuário atinge esse ponto de extremidade com o código de autorização no URI, o código nesse ponto de extremidade troca o código de autorização junto com suas credenciais do cliente por um token de acesso que pode ser usado conforme necessário. Por exemplo, poderia gravá-lo em uma página da web que um script da página pudesse acessar.
- O fluxo implícito ignora completamente esta etapa de autenticação do cliente e apenas carrega uma página da web com o script do cliente. Há um truque interessante aqui com o fragmento de URL que impede que o token de acesso seja transmitido muito, mas o resultado final é basicamente o mesmo: o site hospedado pelo cliente exibe uma página com algum script que pode capturar o token de acesso .
Daí a minha pergunta: o que foi ganho aqui ao pular a etapa de autenticação do cliente?