Autorização OAuth vs Autenticação

87

A terminologia do OAuth já me incomoda há muito tempo. É a autorização OAuth como alguns sugerem ou é autenticação?

Corrija-me se estiver errado, mas sempre li a Autorização como o ato de permitir que alguém acesse um recurso, embora o OAuth não pareça ter nenhuma implementação que realmente permita o acesso de usuários a um determinado recurso. Todas as implementações OAuth falam sobre fornecer a um usuário um token (assinado e às vezes criptografado). Esse token é então passado com cada chamada para um terminal de serviço de back-end onde é verificado quanto à validade, novamente não é uma preocupação do OAuth.

É a autenticação OAuth (todo artigo diz que não é) que, suponho, exige que um usuário forneça credenciais que, por sua vez, prova que um usuário deve / não deve ter acesso?

Portanto, parece que OAuth não é Autenticação de Autorização NOR, uma vez que estes devem ser executados por outros processos. Então, o que diabos é isso? É um processo para comunicar um token? É uma palavra fofa que realmente não tem um significado específico?

É difícil fazer uma pergunta sobre esse assunto sem soar enigmático e supersticioso (fantasmas e goblins), então espero que responder a essa pergunta também não seja uma coisa simples. Entre por seu próprio risco.

Edgarhsanchez
fonte
Também achei essas respostas úteis: security.stackexchange.com/questions/44611/…
antak
OAuth 2.0 é um protocolo de segurança. Detalhes: stackoverflow.com/a/54304326/3623172
Rajat

Respostas:

150

OAuth é uma especificação para autorização

OAuth 2.0 é uma especificação para autorização, mas NÃO para autenticação. RFC 6749, 3.1. O Endpoint de autorização diz explicitamente o seguinte:

O terminal de autorização é usado para interagir com o proprietário do recurso e obter uma concessão de autorização. O servidor de autorização DEVE primeiro verificar a identidade do proprietário do recurso. A maneira como o servidor de autorização autentica o proprietário do recurso (por exemplo, nome de usuário e login de senha, cookies de sessão) está além do escopo desta especificação .


Autenticação OAuth?

A autenticação trata de informações sobre "quem é". A autorização trata das informações sobre "quem concede quais permissões a quem". O fluxo de autorização contém autenticação como sua primeira etapa. É por isso que as pessoas costumam ficar confusas.

Existem muitas bibliotecas e serviços que usam OAuth 2.0 para autenticação. Geralmente é chamado de "login social" e torna as pessoas mais confusas. Se você vir "Autenticação OAuth" (não "Autorização OAuth"), é uma solução que usa OAuth para autenticação.


OpenID Connect

OpenID 1.0 e OpenID 2.0 são especificações antigas para autenticação. Aqueles que fizeram as especificações esperavam que as pessoas usassem OpenID para autenticação. No entanto, algumas pessoas começaram a usar OAuth 2.0 para autenticação (não para autorização) e a autenticação OAuth prevaleceu rapidamente.

Do ponto de vista dos caras do OpenID, a autenticação baseada em OAuth não era segura o suficiente, mas eles tinham que admitir que as pessoas preferiam a autenticação OAuth. Como resultado, os caras do OpenID decidiram definir uma nova especificação, OpenID Connect , em cima do OAuth 2.0.

Sim, isso deixou as pessoas muito mais confusas.


Definições de uma frase de OAuth 2.0 e OpenID Connect

OAuth 2.0 é uma estrutura onde um usuário de um serviço pode permitir que um aplicativo de terceiros acesse seus dados hospedados no serviço sem revelar suas credenciais (ID e senha) para o aplicativo.

insira a descrição da imagem aqui

OpenID Connect é uma estrutura no topo do OAuth 2.0 onde um aplicativo de terceiros pode obter informações de identidade de um usuário que são gerenciadas por um serviço.

insira a descrição da imagem aqui

(Desculpe, essas definições são trechos da página de visão geral da minha empresa)


Definições do ponto de vista dos implementadores

A autenticação é um processo para determinar o assunto (= identificador exclusivo) de um usuário final. Existem muitas maneiras de determinar o assunto. ID e senha, impressões digitais, reconhecimento de íris, etc.

Autorização é um processo para associar o assunto às permissões solicitadas e ao aplicativo cliente que solicitou as permissões. Um token de acesso representa a associação.


Veja também

  1. Implementador Full-Scratch de OAuth e OpenID Connect Palestras sobre descobertas
  2. Diagramas e filmes de todos os fluxos OAuth 2.0
  3. Diagramas de todos os fluxos do OpenID Connect
  4. O guia mais simples para OAuth 2.0
Takahiko Kawasaki
fonte
13
Para aqueles que estão se perguntando por que a autenticação baseada em OAuth não era segura o suficiente , estou assumindo que essas armadilhas comuns são o motivo .
antak
4
"O fluxo de autorização contém a autenticação como sua primeira etapa. É por isso que as pessoas costumam ficar confusas." Ouro.
Sully
1
Bem, a única diferença que posso ver entre os dois diagramas é que o primeiro contém os "dados do usuário" e o segundo contém a "identidade do usuário", então sim, isso é confuso.
Joel_Blum