Kundenseite:
Mit der auth2
Init-Funktion können Sie den hosted_domain
Parameter übergeben, um die im Anmelde-Popup aufgelisteten Konten auf diejenigen zu beschränken, die Ihren entsprechen hosted_domain
. Sie können dies in der Dokumentation hier sehen: https://developers.google.com/identity/sign-in/web/reference
Serverseite:
Selbst bei einer eingeschränkten clientseitigen Liste müssen Sie überprüfen, ob die Liste id_token
mit der von Ihnen angegebenen gehosteten Domain übereinstimmt. Bei einigen Implementierungen bedeutet dies, dass Sie das hd
Attribut überprüfen, das Sie von Google erhalten, nachdem Sie das Token überprüft haben.
Beispiel für einen vollständigen Stapel:
Webcode:
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(); });
});
}
});
});
Servercode (unter Verwendung der googles Node.js-Bibliothek):
Wenn Sie Node.js nicht verwenden, können Sie hier weitere Beispiele anzeigen: 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();
});
});
};