3 votes

Comment puis-je valider que mon openid.op_endpoint lorsqu'une requête est terminée ?

J'ai un système d'authentification basé sur Open ID sur mon site.

Parfois, les utilisateurs auront un compte enregistré sous foo@gmail.com et ils essaieront de se connecter en utilisant le fournisseur d'identifiant ouvert de Google. https://www.google.com/accounts/o8/id Dans ce cas, je voudrais associer automatiquement le compte et le connecter.

Quand le processus est terminé, je reçois une charge utile de quelque part qui prétend que openid.op_endpoint=https://www.google.com/accounts/o8/id .

Ma question :

  • Puis-je faire confiance openid.op_endpoint pour être correct ? Est-ce que cela peut être falsifié par un fournisseur d'openid malveillant ?

Pour illustrer, disons que quelqu'un tape http://evil.org en tant que fournisseur d'identifiant ouvert, est-ce que je peux finir par recevoir une requête en retour qui prétend que openid.op_endpoint c'est google ? Dois-je stocker des informations supplémentaires par rapport au nonce pour le valider ?

La spécification est un peu délicat pour comprendre

1voto

Andrew Arnott Points 35346

Oui et non. Non, vous ne devriez pas faire confiance à tout ce que vous recevez sur le net, y compris openid.op_endpoint . Mais si vous utilisez une bibliothèque OpenID sécurisée, ce paramètre est vérifié avant que l'utilisateur ne soit autorisé à se connecter à votre site. La spécification OpenID fournit, en fait, doit fournir un moyen pour que ce paramètre et d'autres soient vérifiés et sans vérification, le protocole d'authentification est pire qu'inutile.

Donc, assurez-vous que votre bibliothèque est décente. Alors oui, faites confiance au paramètre openid.op_endpoint. Mais pas à celui que vous obtenez vous-même à partir de la chaîne de requête, car les messages OpenID peuvent vous être envoyés par POST et le paramètre n'apparaîtrait pas dans la chaîne de requête. Pire encore, si vous deviez vérifier la chaîne de requête dans ce cas, vous vous exposeriez probablement à une faille de sécurité où un attaquant pourrait ajouter ce paramètre à la chaîne de requête et vous tromper tout en respectant les exigences de la bibliothèque. Il est donc préférable d'utiliser l'API exposée par la bibliothèque pour connaître le point de terminaison OP.

Pour ce qui est de lier les comptes de cette manière, il s'agit d'une bonne approche puisque Google n'enverra que les adresses électroniques qu'il sait être réellement contrôlées par l'utilisateur. Si vous avez déjà demandé à votre utilisateur de passer par une étape de vérification de l'adresse électronique, la liaison du compte est sûre. Mais si l'adresse électronique dont vous disposez pour l'utilisateur n'a jamais été vérifiée, vous ne devez pas lier les comptes sur la base de cette correspondance. Sinon, je peux détourner le compte de quelqu'un d'autre en créant un compte avec l'adresse électronique de cette personne, puis attendre qu'elle se connecte à l'aide d'OpenID et accéder à son compte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X