Autenticação JWT vs OAuth

Tenho um novo SPA com um modelo de autenticação sem estado a usar o JWT. Eu sou frequentemente solicitado a referir OAuth para fluxos de autenticação como pedir-me para enviar 'tokens ao portador' para cada pedido em vez de um cabeçalho simples token, mas eu acho que OAuth é muito mais complexo do que uma simples autenticação baseada em JWT. Quais são as principais diferenças, devo fazer a autenticação JWT comportar-se como OAuth?

também estou a usar o JWT como símbolo XSRF para impedir o XSRF, mas estou a ser pedido para manter separá-los? Devo mantê-los separados? Qualquer ajuda neste domínio será apreciada e poderá conduzir a um conjunto de orientações para a comunidade.

Author: CodinCat, 2016-10-07

7 answers

TL; DR Se você tem cenários muito simples, como um aplicativo cliente único, uma API única, então ele pode não valer a pena ir OAuth 2.0, por outro lado, muitos clientes diferentes (baseado em navegador, nativo móvel, lado servidor, etc), então aderindo às regras OAuth 2.0 pode torná-lo mais gerenciável do que tentar rolar o seu próprio sistema.


Como indicado em outra resposta, JWT (aprender Tokens Web JSON ) é apenas um formato token, que define um compacto e mecanismo auto-contido para a transmissão de dados entre as partes de uma forma que pode ser verificada e confiável, porque é assinado digitalmente. Além disso, as regras de codificação de um JWT também tornam estes tokens muito fáceis de usar no contexto do HTTP.

Sendo autónomos (o símbolo actual contém informações sobre um determinado assunto), são também uma boa escolha para a implementação de mecanismos de autenticação apátridas (também conhecido por Olha a mãe, sem sessões!). Ao percorrer este caminho e o único o que uma parte deve apresentar para ter acesso a um recurso protegido é o próprio token, o token em questão pode ser chamado de token portador.

Na prática, o que está a fazer já pode ser classificado com base em fichas ao portador. No entanto, considere que não está a usar fichas ao portador tal como especificado pelas especificações relacionadas com o OAuth 2.0 (ver RFC 6750). Isso implicaria, confiando no cabeçalho HTTP Authorization e usando o esquema de autenticação Bearer.

Relativamente à utilização da JWT para prevenir CSRF sem saber detalhes exatos é difícil determinar a validade dessa prática, mas para ser honesto não parece correto e/ou vale a pena. O seguinte artigo ( Cookies vs Tokens: o Guia Definitivo) pode ser uma leitura útil sobre este assunto, particularmente a secção XSS e XSRF Protection.

Um último conselho, mesmo que não precises de ir ao total OAuth 2.0, eu recomendo vivamente que passes o teu token de acesso dentro de ti. o cabeçalho Authorization em vez de ir com cabeçalhos personalizados. Se eles são realmente tokens ao portador seguem as regras do RFC 6750, se não, você pode sempre criar um esquema de autenticação personalizado e ainda usar esse cabeçalho.

Os cabeçalhos de autorização são reconhecidos e tratados especialmente por proxies HTTP e servidores. Assim, a utilização de tais cabeçalhos para enviar tokens de acesso a servidores de recursos reduz a probabilidade de fuga ou armazenamento não intencional de Pedidos autenticados em geral, e especialmente os cabeçalhos de autorização.

(Fonte: RFC 6819, secção 5.4.1)

 160
Author: João Angelo, 2018-08-21 15:50:55

OAuth 2.0 define um protocolo, ou seja, especifica como os tokens são transferidos, o JWT define um formato token.

OAuth 2. 0 e a "autenticação JWT" têm uma aparência semelhante quando se trata da (2.ª) fase em que o cliente apresenta o token para o servidor de recursos: o token é passado num cabeçalho.

Mas "autenticação JWT" não é um padrão e não especifica Como o cliente obtém o token em primeiro lugar (a primeira fase). É aí que a percepção a complexidade do OAuth vem de: ele também define várias maneiras em que o cliente Pode Obter um token de acesso de algo que é chamado de servidor de autorização.

A diferença real é que o JWT é apenas um formato token, o OAuth 2.0 é um protocolo (que may use um JWT como um formato token).

 130
Author: Hans Z., 2016-10-07 07:12:05
Em primeiro lugar, temos de diferenciar JWT e OAuth. Basicamente, JWT é um formato token. OAuth é um framework de autenticação que pode usar o JWT como um token. O OAuth usa armazenamento do lado servidor e do lado cliente. Se você quiser fazer o logout real você deve ir com o OAuth2. A autenticação com o token JWT não pode sair de facto. Porque você não tem um servidor de autenticação que mantém o controle dos tokens. Se você quiser fornecer uma API para clientes de terceiros, você deve usar o OAuth2 também. O OAuth2 é muito flexível. A implementação do JWT é muito fácil e não leva muito tempo para ser implementada. Se a sua aplicação precisa deste tipo de flexibilidade, você deve ir com o OAuth2. Mas se você não precisa deste cenário de uso, implementar o OAuth2 é uma perda de tempo.

O token XSRF é sempre enviado ao cliente em cada cabeçalho de resposta. Não importa se um token CSRF é enviado em um token JWT ou não, porque o token CSRF está seguro consigo mesmo. Por conseguinte, o envio do token CSRF na JWT é desnecessário.

 54
Author: Melikşah Şimşek, 2017-12-07 02:29:32
Parece que todos os que responderam aqui perderam o ponto de discórdia de OAUTH.

Da Wikipédia

OAuth é uma norma aberta para delegação de acesso, normalmente utilizada como forma de os utilizadores da Internet concederem aos sítios Web ou aplicações acesso às suas informações noutros sítios Web, mas sem lhes dar as senhas.[1] este mecanismo é utilizado por empresas como o Google, o Facebook, a Microsoft e o Twitter para permitir que os utilizadores partilhem informações sobre os seus contas com aplicações ou websites de terceiros.

O ponto chave aqui é access delegation. Por que alguém criaria OAUTH quando há uma autenticação baseada em id / pwd, apoiada por auth multifactorial como OTPs e mais ainda pode ser assegurada por JWTs que são usados para garantir o acesso aos caminhos (como scopes em OAUTH) e definir a expiração do acesso

Não vale a pena usar o OAUTH se os consumidores acederem aos seus recursos(os seus pontos finais) apenas através dos seus websites(ou aplicativos)de confiança. quais são as suas hospedadas novamente nos seus pontos finais

Só poderá ir à autenticação de OAUTH se for um OAUTH provider nos casos em que os proprietários dos recursos (utilizadores) queiram aceder aos seus(seus) recursos (seus) (pontos finais) através de um cliente de terceiros (aplicação externa).E é exatamente criado para o mesmo propósito, embora você possa abusar dele em geral.

Outra nota importante:
Está a usar livremente a palavra authentication para o JWT e OAUTH, mas não fornece a autenticação mecanismo. Sim, um é um mecanismo token e o outro é protocolo, mas uma vez autenticado eles são apenas utilizados para a autorização (gerenciamento de acesso). Você tem que apoiar o OAUTH com autenticação de tipo OPENID ou suas próprias credenciais de cliente

 22
Author: user3151330, 2017-07-16 16:19:19

JWT (Tokens Web JSON)- é apenas um formato token. Os tokens JWT são estruturas de dados codificados JSON que contêm informações sobre o emitente, assunto (reivindicações), tempo de expiração, etc. É assinado para a prova de adulteração e autenticidade e pode ser criptografado para proteger a informação token usando abordagem simétrica ou assimétrica. JWT é mais simples do que SAML 1.1/2.0 e é suportado por todos os dispositivos e é mais poderoso do que SWT(Simple Web Token).

OAuth2 - OAuth2 resolver um problema que o usuário quer acessar os dados usando software cliente, como aplicativos web baseados em navegação, aplicativos móveis nativos ou aplicativos desktop. O OAuth2 é apenas para autorização, o software cliente pode ser autorizado a acessar os recursos em nome do usuário final usando token de acesso.

OpenID Connect OpenID - OpenID Connect constrói no topo do OAuth2 e adiciona autenticação. OpenID Connect adiciona alguma restrição ao OpenID Connect como o UserInfo Endpoint, ID Token, discovery e registo dinâmico do OpenID Connect fornecedores e gestão de sessões. JWT é o formato obrigatório para o token.

CSRF protection - não precisa de implementar a protecção CSRF se não guardar o token no cookie do navegador.

Pode ler mais detalhes aqui http://proficientblog.com/microservices-security/

 22
Author: ManishSingh, 2018-01-16 13:34:16

O JWT é um protocolo de autenticação onde permitimos que as reivindicações codificadas (token) sejam transferidas entre duas partes (cliente e servidor) e o token é emitido após a identificação do cliente. com cada pedido subsequente, enviamos o token

Considerando que o Oauth2 é um quadro de autenticação, em que dispõe de procedimentos e configurações gerais definidos pelo framework. JWT pode ser usado como um mecanismo dentro do Oauth2

Pode ler mais sobre isto aqui

OAuth ou JWT? Que um para usar e porquê?

 1
Author: Samuel J Mathew, 2018-02-21 03:13:47

Jwt é um conjunto rigoroso de instruções para a emissão e validação de fichas de acesso assinadas. Os tokens contêm alegações que são usadas por um aplicativo para limitar o acesso a um usuário

Por outro lado, o OAuth2 não é um protocolo, é um quadro de autorização delegado. pense em uma diretriz muito detalhada, para permitir que usuários e aplicações autorizem permissões específicas para outras aplicações em Configurações privadas e públicas. A ligação do OpenID que fica em cima do OAUTH2 dá-lhe Autenticação e Authorization.it detalhes de como vários papéis diferentes, usuários em seu sistema, aplicativos do lado do servidor como uma API, e clientes como sites ou aplicativos móveis nativos, podem se autenticar com cada othe

Nota o oauth2 pode trabalhar com jwt, implementação flexível, extensível a diferentes aplicações

 0
Author: naila naseem, 2018-02-04 17:31:19