A segurança do protocolo OAuth 1.0 ( RFC 5849 ) se baseia na suposição de que uma chave secreta incorporada em um aplicativo cliente pode ser mantida em sigilo. No entanto, a suposição é ingênua.
No OAuth 2.0 ( RFC 6749 ), um aplicativo cliente ingênuo é chamado de cliente confidencial . Por outro lado, um aplicativo cliente em um ambiente em que é difícil manter uma chave secreta em sigilo é chamado de cliente público . Veja 2.1. Tipos de cliente para obter detalhes.
Nesse sentido, o OAuth 1.0 é uma especificação apenas para clientes confidenciais.
" OAuth 2.0 e o caminho para o inferno " afirma que o OAuth 2.0 é menos seguro, mas não há diferença prática no nível de segurança entre os clientes do OAuth 1.0 e os clientes confidenciais do OAuth 2.0. O OAuth 1.0 requer computação de assinatura, mas não aumenta a segurança se já estiver garantido que uma chave secreta no lado do cliente possa ser mantida em sigilo. A assinatura de computação é apenas um cálculo complicado, sem qualquer aprimoramento prático da segurança. Quero dizer, comparado à simplicidade que um cliente OAuth 2.0 se conecta a um servidor via TLS e apenas apresenta client_id
e client_secret
, não se pode dizer que o cálculo complicado é melhor em termos de segurança.
Além disso, o RFC 5849 (OAuth 1.0) não menciona nada sobre redirecionadores abertos, enquanto o RFC 6749 (OAuth 2.0) faz. Ou seja, o oauth_callback
parâmetro do OAuth 1.0 pode se tornar uma falha de segurança.
Portanto, não acho que o OAuth 1.0 seja mais seguro que o OAuth 2.0.
[14 de abril de 2016] Além de esclarecer meu ponto
A segurança do OAuth 1.0 depende do cálculo da assinatura. Uma assinatura é calculada usando uma chave secreta, na qual uma chave secreta é uma chave compartilhada para HMAC-SHA1 ( RFC 5849, 3.4.2 ) ou uma chave privada para RSA-SHA1 ( RFC 5849, 3.4.3 ). Qualquer pessoa que conhece a chave secreta pode calcular a assinatura. Portanto, se a chave secreta for comprometida, a complexidade do cálculo da assinatura não terá sentido, por mais complexa que seja.
Isso significa que a segurança do OAuth 1.0 não depende da complexidade e da lógica do cálculo de assinaturas, mas apenas da confidencialidade de uma chave secreta. Em outras palavras, o que é necessário para a segurança do OAuth 1.0 é apenas a condição de que uma chave secreta possa ser mantida em sigilo. Isso pode parecer extremo, mas o cálculo da assinatura não adiciona aprimoramento de segurança se a condição já estiver satisfeita.
Da mesma forma, os clientes confidenciais do OAuth 2.0 contam com a mesma condição. Se a condição já estiver satisfeita, há algum problema na criação de uma conexão segura usando TLS e no envio client_id
e client_secret
para um servidor de autorização através da conexão segura? Existe alguma grande diferença no nível de segurança entre os clientes confidenciais do OAuth 1.0 e OAuth 2.0 se os dois confiarem na mesma condição?
Não consigo encontrar um bom motivo para o OAuth 1.0 culpar o OAuth 2.0. O fato é que (1) OAuth 1.0 é apenas uma especificação apenas para clientes confidenciais e (2) OAuth 2.0 simplificou o protocolo para clientes confidenciais e também para clientes públicos suportados . Independentemente de saber bem ou não, os aplicativos de smartphone são classificados como clientes públicos ( RFC 6749, 9 ), que se beneficiam do OAuth 2.0.