Autenticação JWT vs 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.
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 HTTPAuthorization
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çalhoAuthorization
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)
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).
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.
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
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
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/
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
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