Comment faire côté client bibliothèques JS OAuth2 pour maintenir la sécurité de l'authentification?
Je suis nouveau sur OAuth2 et il y a un problème que j'ai été aux prises avec, et malgré les recherches ne peut toujours pas saisir.
La difficulté à avoir un JS client pour OAuth2 est que vous ne pouvez pas stocker le client secret, car il va être largement accessible dans le navigateur. I. e. dans cette SORTE de question les mieux notées commentaire dit:
"Je pense que tokenSecret et consumerSekret paramètres sont censés être
secret! Comment pourraient-ils rester secrète lors du téléchargement du navigateur?!!!"
Donc comment faire côté client OAuth2 cadres comme hello.js ou oauth.io surmonter ce problème? Je sais qu'ils utilisent un serveur proxy (qui sait, l'ID et le secret) pour leurs demandes, mais le client code JS doit encore en quelque sorte dire le proxy qui il est. Donc, ce qui empêche quiconque de prendre le code JS de mon site web et de parler à la procuration sur mon compte?
J'ai aussi trouvé le Google Api de la Bibliothèque du Client pour JavaScript. Autant que je sache, il y a le code client ne passe pas un secret. Dois-je comprends bien qu'ils gèrent cela en ayant un prédéfini OAuth adresse de réponse? (de sorte que les jetons sont toujours retournés par prédéfinis adresse HTTP). Donc, même si quelqu'un essaie d'usurper l'identité de mon site web en utilisant ma carte d'identité, les jetons seront toujours retourné à mon site web?
Peut-être que je suis confus un peu différents sujets ici, toute la lumière sur le sujet serait appréciée.
Vous devez vous connecter pour publier un commentaire.
Il y a des flux dans OAuth2 qui ne nécessitent pas un secret (par exemple
implicit
l'écoulement est généralement utilisé pour le JS, clients, SPAs, etc). Pas tous les fournisseurs de soutien de ce flux, donc dans ces situations, vous avez besoin d'un composant côté serveur qui négocie, pour vous, puis gère les interactions avec votre front-end/de l'appareil.En tout cas, vous avez besoin de l'utilisateur à s'authentifier. Le
secret
authentifie le client (votre application), pas l'utilisateur. L'url de retour (ou de rappel) protège le jeton à être posté ailleurs (seulement dans votre application).Des échantillons de ces flux sont ici: https://docs.auth0.com/protocols#5
Mise à jour:
Il y a un code spécifique/jeton protocole d'échange pour les "clients publics" qui ajoute une sécurité supplémentaire: PKCE (comment il fonctionne, c'est ici: https://auth0.com/docs/protocols#oauth2-pkce-for-public-clients)
En cas de JS client, Google ne valider que le JS origine correspond à celui enregistré avec le numéro de client. Donc, si quelqu'un utilise un autre numéro de client, au mieux, ils peuvent obtenir un jeton uniquement pour les comptes propres (qui ne va pas être très utile).
En général, vous ne pouvez jamais savoir qui/ce que le client (ou code) est de parler à votre serveur. Vous ne voyez que les données qu'ils envoient. Donc, si les mêmes paquets sont envoyés par d'autres clients/code, il n'y a rien que vous pouvez faire et en général, vous ne devriez pas de soins. Vous devez être attentif à ce que vous avez des informations d'identification correctes dans la demande.
L'ensemble de la confusion en ce qui concerne les paramètres qui nous avons eu à passer pour obtenir le jeton d'accès. J'ai fait un petit code lib. @ git, vous pouvez vérifier it out.
https://github.com/dev-sandeep/oauth-js