Je ne parviens pas à trouver de documentation sur la façon de restreindre la connexion à mon application Web (qui utilise OAuth2.0 et les API Google) pour n'accepter que les demandes d'authentification des utilisateurs avec un e-mail sur un nom de domaine ou un ensemble de noms de domaine spécifique. Je voudrais mettre sur liste blanche plutôt que sur liste noire.
Quelqu'un a-t-il des suggestions sur la façon de procéder, de la documentation sur la méthode officiellement acceptée pour le faire ou un travail facile et sécurisé?
Pour mémoire, je ne connais aucune information sur l'utilisateur jusqu'à ce qu'il tente de se connecter via l'authentification OAuth de Google. Tout ce que je reçois en retour, ce sont les informations de base sur l'utilisateur et l'e-mail.
la source
Réponses:
J'ai donc une réponse pour vous. Dans la demande oauth, vous pouvez ajouter "hd = domain.com" et cela limitera l'authentification aux utilisateurs de ce domaine (je ne sais pas si vous pouvez faire plusieurs domaines). Vous pouvez trouver le paramètre hd documenté ici
J'utilise les bibliothèques google api à partir d'ici: http://code.google.com/p/google-api-php-client/wiki/OAuth2 , j'ai donc dû modifier manuellement le fichier /auth/apiOAuth2.php pour cela :
Edit: Je travaille toujours sur cette application et j'ai trouvé ceci, qui peut être la réponse la plus correcte à cette question. https://developers.google.com/google-apps/profiles/
la source
hd
paramètre dans lacreateAuthUrl
fonction, vous devrez toujours vérifier que l'utilisateur se connecte avec l'adresse e-mail de votre domaine. Il est très facile de modifier le paramètre de lien pour autoriser toutes les adresses e-mail et ensuite accéder à votre application.hd
voir d'utilisation des paramètres developers.google.com/identity/work/it-apps~~V~~singular~~3rd et la référence duhd
paramètre URI peut être trouvé developers.google.com/identity/protocols/... En résumé, lehd
param devrait être considéré comme un filtre d'affichage basé sur le domaine pour le côté Google Auth, mais doit toujours être validé de votre côté.hd
paramètre, je ne peux restreindre qu'un seul domaine, que faire maintenant si je veux restreindre deux ou trois domaines?Côté client:
En utilisant la
auth2
fonction init, vous pouvez passer lehosted_domain
paramètre pour restreindre les comptes répertoriés dans la fenêtre de connexion à ceux qui correspondent à votrehosted_domain
. Vous pouvez le voir dans la documentation ici: https://developers.google.com/identity/sign-in/web/referenceDu côté serveur:
Même avec une liste côté client restreinte, vous devrez vérifier que le domaine
id_token
correspond au domaine hébergé que vous avez spécifié. Pour certaines implémentations, cela signifie vérifier lehd
attribut que vous recevez de Google après avoir vérifié le jeton.Exemple de pile complète:
Code Web:
Code du serveur (en utilisant la bibliothèque googles Node.js):
Si vous n'utilisez pas Node.js, vous pouvez voir d'autres exemples ici: https://developers.google.com/identity/sign-in/web/backend-auth
la source
Lors de la définition de votre fournisseur, passez un hachage à la fin avec le paramètre «hd». Vous pouvez en savoir plus ici. https://developers.google.com/accounts/docs/OpenIDConnect#hd-param
Par exemple, pour config / initializers / devise.rb
la source
Voici ce que j'ai fait en utilisant le passeport dans node.js.
profile
est l'utilisateur qui tente de se connecter.Ensuite, créez simplement une logique pour rechercher plusieurs domaines au lieu d'un seul. Je pense que cette méthode est sécurisée car 1. le symbole «@» n'est pas un caractère valide dans la première ou la deuxième partie d'une adresse e-mail. Je ne pouvais pas tromper la fonction en créant une adresse e-mail comme
mike@[email protected]
2. Dans un système de connexion traditionnel, je pourrais, mais cette adresse e-mail ne pourrait jamais exister dans Google. S'il ne s'agit pas d'un compte Google valide, vous ne pouvez pas vous connecter.la source
Depuis 2015, il existe une fonction dans la bibliothèque pour définir cela sans avoir besoin de modifier la source de la bibliothèque comme dans la solution de contournement par aaron-bruce
Avant de générer l'URL, appelez simplement
setHostedDomain
votre client Googlela source