OAuth2 vs API pública

4

Meu entendimento do OAuth (2.0) é que ele é uma pilha e um protocolo de software para permitir que mais de dois aplicativos da Web compartilhem informações sobre um único usuário final. O usuário A é um membro do Site B e do Site C; O Site B quer buscar alguns dados do Site C sobre o Usuário A, e é aí que o OAuth entra em cena.

Então, primeiro, se essa avaliação estiver incorreta, por favor, comece esclarecendo isso para mim e me corrigindo!

Supondo que estou no caminho certo, acho que não estou vendo a necessidade do OAuth começar (!). Tenho certeza de que só não estou vendo a "floresta através das árvores" aqui, mas do jeito que eu vejo, o Site C não poderia expor uma API pública que o Site B poderia usar para buscar os mesmos dados (sem o OAuth) ? Se o Site C exigisse credenciais de usuário para acessar os dados, essa API pública poderia usar apenas HTTPS para transporte seguro e exigir nome de usuário / senha como parte de cada chamada de API?

Novamente, tenho certeza de que estou perdendo algo, mas não estou entendendo por que precisaria do OAuth quando uma API pública e segura escrita e exposta pelo Site C parece mais do que capaz de fornecer o que o Site B precisa em relação a Usuário A.

Em geral, estou procurando um conjunto de diretrizes para decidir entre usar o OAuth para meus aplicativos da web ou apenas escrever meu próprio serviço da web (expondo a API pública).

Obrigado antecipadamente!

    
por herpylderp 02.07.2012 / 15:10
fonte

3 respostas

10

OAuth não é sobre a exposição de uma API. OAuth é sobre autorização: O Site B tem permissão para acessar os recursos do Usuário A.

Antes de o twitter começar a implementar o OAuth, ele usava a autenticação básica HTTP. Isso significava que os usuários precisavam fornecer suas credenciais a sites / serviços de terceiros para permitir que eles acessassem seus dados. Isso significa que o site agora tem acesso ilimitado aos dados dos usuários, e a única maneira de "revogar" esse acesso é alterar sua senha.

OAuth resolve esse problema não fornecendo ao site as credenciais dos usuários, mas sim um token. Esse token fornece acesso (possivelmente limitado) a recursos de usuários, sem ter nenhuma senha. Se um usuário quiser bloquear este site, ele só precisará revogar o token, e esse site / serviço não terá mais acesso.

    
por 02.07.2012 / 15:43
fonte
4

OAuth é um padrão aberto que não exige que os usuários forneçam suas credenciais para vários sites diferentes. Eles só fornecem suas credenciais para um site e, em seguida, os outros sites podem autenticar seus usuários com seu site sem solicitar um nome de usuário / senha. Você já viu esse benefício ao fazer login em sua conta aqui.

Você pode implementar sua própria solução personalizada, mas isso elimina os benefícios de usar um padrão aberto. Usando um padrão aberto permite duas coisas:

  1. Você pode usar outras bibliotecas de código aberto para implementar seu próprio serviço OAuth em vez de reinventar a roda.
  2. Você não estará forçando outras pessoas a escrever sua própria lógica personalizada para autenticação no seu site. É melhor permitir às pessoas uma interface OAuth conhecida do que forçá-las a conhecer outra nova API.
por 02.07.2012 / 15:38
fonte
1

Em termos leigos, se você estiver expondo uma API, solicitará que o outro site passe o nome de usuário / senha para sua API, para que você verifique essas credenciais e o usuário possa começar a usar o outro site.

No entanto, com o OAuth, o usuário não fornece nome de usuário / senha ou credenciais de login ao outro site, mas diretamente ao seu site.

Isso ocorre porque é uma violação de segurança do outro site solicitar credenciais de login do usuário que realmente pertencem ao seu site.

    
por 02.07.2012 / 15:43
fonte