Qual é a diferença entre a autenticação baseada em OAuth e a baseada em Token?

eu pensei que OAuth é basicamente uma especificação de autenticação baseada em token, mas a maioria dos frameworks de tempo agem como se houvesse uma diferença entre eles. Por exemplo, como mostrado na imagem abaixo , O Jhipster pergunta se deve usar uma autenticação baseada em OAuth ou uma autenticação baseada em token.

Não são a mesma coisa ? Qual é exatamente a diferença, uma vez que ambos incluem tokens em suas implementações ?

enter image description here

Author: Cemre, 2016-01-14

3 answers

Esta é uma boa pergunta -- há muita confusão em torno de tokens e OAuth.

Primeiro, quando mencionas OAuth, provavelmente estás a referir-te à norma OAuth2 . Esta é a última versão do protocolo de OAuth, e é disso que a maioria das pessoas está especificamente falando quando eles dizem "OAuth".

O protocolo de OAuth suporta vários tipos diferentes de autenticação e autorização (4 para ser mais preciso).

Em segundo lugar, o protocolo de OAuth funciona autenticar utilizadores através de fichas. A ideia aqui é esta:

Em vez de fazer com que o seu utilizador envie as suas credenciais reais para o seu servidor em cada pedido (como fariam com a Auth básica, onde um utilizador envia o seu nome de utilizador/senha para o servidor para cada pedido), com OAuth você primeiro troca as suas credenciais de Utilizador por um 'token', e depois autentica os utilizadores com base neste 'token'.

A ideia de OAuth é que, ao exigir que os utilizadores passem as suas credenciais confidenciais pelo rede menos frequentemente, menos coisas ruins podem acontecer. (Esta é a idéia, de qualquer maneira.)

Agora, aqui é onde os tokens entram em jogo: o spec de OAuth é construído em torno do conceito de tokens, mas não especifica o que é um TOKEN.

No sentido mais 'geral' , um token é apenas uma cadeia que identifica um utilizador de forma única. É isso.

As pessoas perceberam isso, e desenvolveram um novo padrão para a criação de tokens, chamado de JSON Web Token standard. Este padrão basicamente fornece um conjunto de regras para a criação de tokens de uma forma muito específica, o que torna os tokens mais úteis para você em geral.

Os JWTs deixam-te fazer coisas como:

    Assinem criptograficamente um símbolo para que saibam que um símbolo não foi adulterado por um utilizador.
  • encriptar os tokens para que o conteúdo não possa ser lido em texto simples.
  • introduzi os dados do JSON dentro de uma cadeia simbólica de uma forma normal.
Agora, na maior parte: praticamente todos na comunidade de desenvolvimento têm concordei que se você está usando qualquer tipo de OAuth, então os tokens que você está usando devem ser JSON Web Tokens.

==========

Está bem! Agora que cobrimos a história, deixa-me responder à tua pergunta.

A escolha que está a fazer acima é se quer ou não activar a especificação OAuth2 completa para Autenticação / Autorização (o que é bastante complexo), ou se quer simplesmente alguma 'autenticação simbólica'básica.

Porque o protocolo de OAuth fornece múltiplos diferentes maneiras de autenticar de uma forma compatível com padrões, ele adiciona muita complexidade para a maioria dos sistemas de autenticação.

Por causa disso, muitos frameworks oferecem uma versão "dumbed down" do fluxo de Bolsa de senha do OAuth2, que é essencialmente um método simples onde:
  • um utilizador envia o seu nome de utilizador /senha para o seu servidor num URL como / login.
  • o seu servidor gera um token JWT para o utilizador.
  • o seu servidor devolve esse símbolo ao usuario.
  • o utilizador Guarda este token nos seus cookies, dispositivos móveis ou possível servidor de API, onde o usam para fazer pedidos.

Novamente: o fluxo acima não é compatível com o OAuth, mas é uma versão ligeiramente mais simples que ainda usa tokens.

O ponto principal aqui é que os tokens (JWTs) são geralmente úteis, e não precisam ser emparelhados com o fluxo de OAuth.

Eu sei que isto é uma parede de texto, mas espero que responda à tua pergunta com mais profundidade=)

 96
Author: rdegges, 2016-01-21 17:27:57

Quando está a pedir recursos a partir do serviço web seguro, pode fornecer um token de autenticação na chamada. O token age como" código secreto " para acessar o recurso.

OAuth é apenas um tipo específico de método de autenticação baseado em token.

 4
Author: lipponen, 2016-01-14 10:49:29

OAuth é uma especificação para autorização e não autenticação

OAuth 2.0 é uma especificação para autorização, mas não para Autenticação. RFC 6749, 3.1. O objectivo da autorização diz explicitamente o seguinte:

O objectivo da autorização é usado para interagir com o dono do recurso e obter uma autorização. O servidor de autorização deve primeiro verificar a identidade do proprietário do recurso. A forma como o servidor de autorizações autentica o dono do recurso (por exemplo, o utilizador) e o login da senha, cookies de sessão) está fora do âmbito deste Especificação

Só utilize OAuth se quiser dar acesso a um serviço de terceiros à sua apis. Mesmo quando você está usando OAuth você precisaria de algum tipo de autenticação (baseada em token ou baseada em sessão etc) para autenticar os usos. OAuth não foi concebido para Autenticação.

Veja esta pergunta.

 0
Author: nithin, 2018-09-27 20:55:54