Côté client :
Utilisation de la auth2
vous pouvez passer la fonction hosted_domain
pour restreindre les comptes listés dans la fenêtre popup de connexion à ceux qui correspondent à vos critères de sélection. hosted_domain
. Vous pouvez voir cela dans la documentation ici : https://developers.google.com/identity/sign-in/web/reference
Côté serveur :
Même avec une liste restreinte côté client, vous devrez vérifier que le fichier id_token
correspond au domaine hébergé que vous avez spécifié. Pour certaines implémentations, cela signifie vérifier la valeur hd
que vous recevez de Google après avoir vérifié le jeton.
Full Stack Exemple :
Code Web :
gapi.load('auth2', function () {
// init auth2 with your hosted_domain
// only matching accounts will show up in the list or be accepted
var auth2 = gapi.auth2.init({
client_id: "your-client-id.apps.googleusercontent.com",
hosted_domain: 'your-special-domain.com'
});
// setup your signin button
auth2.attachClickHandler(yourButtonElement, {});
// when the current user changes
auth2.currentUser.listen(function (user) {
// if the user is signed in
if (user && user.isSignedIn()) {
// validate the token on your server,
// your server will need to double check that the
// `hd` matches your specified `hosted_domain`;
validateTokenOnYourServer(user.getAuthResponse().id_token)
.then(function () {
console.log('yay');
})
.catch(function (err) {
auth2.then(function() { auth2.signOut(); });
});
}
});
});
Code du serveur (en utilisant la bibliothèque Node.js de Google) :
Si vous n'utilisez pas Node.js, vous pouvez voir d'autres exemples ici : https://developers.google.com/identity/sign-in/web/backend-auth
const GoogleAuth = require('google-auth-library');
const Auth = new GoogleAuth();
const authData = JSON.parse(fs.readFileSync(your_auth_creds_json_file));
const oauth = new Auth.OAuth2(authData.web.client_id, authData.web.client_secret);
const acceptableISSs = new Set(
['accounts.google.com', 'https://accounts.google.com']
);
const validateToken = (token) => {
return new Promise((resolve, reject) => {
if (!token) {
reject();
}
oauth.verifyIdToken(token, null, (err, ticket) => {
if (err) {
return reject(err);
}
const payload = ticket.getPayload();
const tokenIsOK = payload &&
payload.aud === authData.web.client_id &&
new Date(payload.exp * 1000) > new Date() &&
acceptableISSs.has(payload.iss) &&
payload.hd === 'your-special-domain.com';
return tokenIsOK ? resolve() : reject();
});
});
};