La sécurité du protocole OAuth 1.0 ( RFC 5849 ) repose sur l'hypothèse qu'une clé secrète intégrée dans une application cliente peut rester confidentielle. Cependant, l'hypothèse est naïve.
Dans OAuth 2.0 ( RFC 6749 ), une telle application client naïve est appelée client confidentiel . En revanche, une application cliente dans un environnement où il est difficile de garder une clé secrète confidentielle est appelée client public . Voir 2.1. Types de clients pour plus de détails.
En ce sens, OAuth 1.0 est une spécification uniquement pour les clients confidentiels.
« OAuth 2.0 et la route de l'enfer » indique qu'OAuth 2.0 est moins sécurisé, mais il n'y a pas de différence pratique de niveau de sécurité entre les clients OAuth 1.0 et les clients confidentiels OAuth 2.0. OAuth 1.0 nécessite de calculer la signature, mais il n'améliore pas la sécurité s'il est déjà assuré qu'une clé secrète côté client peut être gardée confidentielle. Le calcul de la signature n'est qu'un calcul fastidieux sans aucune amélioration pratique de la sécurité. Je veux dire, par rapport à la simplicité qu'un client OAuth 2.0 se connecte à un serveur via TLS et présente simplement client_id
et client_secret
, on ne peut pas dire que le calcul encombrant est meilleur en termes de sécurité.
De plus, la RFC 5849 (OAuth 1.0) ne mentionne rien sur les redirecteurs ouverts, contrairement à la RFC 6749 (OAuth 2.0). Autrement dit, le oauth_callback
paramètre d'OAuth 1.0 peut devenir une faille de sécurité.
Par conséquent, je ne pense pas qu'OAuth 1.0 soit plus sûr qu'OAuth 2.0.
[14 avril 2016] Ajout pour clarifier mon point
La sécurité OAuth 1.0 repose sur le calcul des signatures. Une signature est calculée à l'aide d'une clé secrète où une clé secrète est une clé partagée pour HMAC-SHA1 ( RFC 5849, 3.4.2 ) ou une clé privée pour RSA-SHA1 ( RFC 5849, 3.4.3 ). Quiconque connaît la clé secrète peut calculer la signature. Donc, si la clé secrète est compromise, la complexité du calcul de la signature n'a aucun sens, quelle que soit sa complexité.
Cela signifie que la sécurité OAuth 1.0 ne repose pas sur la complexité et la logique du calcul de signature, mais simplement sur la confidentialité d'une clé secrète. En d'autres termes, ce qui est nécessaire pour la sécurité OAuth 1.0 n'est que la condition qu'une clé secrète puisse être gardée confidentielle. Cela peut sembler extrême, mais le calcul de la signature n'ajoute aucune amélioration de la sécurité si la condition est déjà remplie.
De même, les clients confidentiels OAuth 2.0 s'appuient sur la même condition. Si la condition est déjà remplie, y a-t-il un problème à créer une connexion sécurisée à l'aide de TLS et à envoyer client_id
et client_secret
à un serveur d'autorisation via la connexion sécurisée? Existe-t-il une grande différence de niveau de sécurité entre les clients confidentiels OAuth 1.0 et OAuth 2.0 si les deux reposent sur la même condition?
Je ne trouve aucune bonne raison pour qu'OAuth 1.0 blâme OAuth 2.0. Le fait est simplement que (1) OAuth 1.0 n'est qu'une spécification uniquement pour les clients confidentiels et (2) OAuth 2.0 a également simplifié le protocole pour les clients confidentiels et les clients publics pris en charge . Qu'elles soient bien connues ou non, les applications pour smartphones sont classées comme clients publics ( RFC 6749, 9 ), qui bénéficient d'OAuth 2.0.