ग्राहक की ओर:
auth2
Init फ़ंक्शन का उपयोग करते हुए , आप hosted_domain
साइनइन पॉपअप पर सूचीबद्ध खातों को अपने मेल खाने वालों को प्रतिबंधित करने के लिए पैरामीटर पास कर सकते हैं hosted_domain
। आप इसे यहां प्रलेखन में देख सकते हैं: https://developers.google.com/identity/sign-in/web/reference
सर्वर साइड:
यहां तक कि प्रतिबंधित क्लाइंट-साइड सूची के साथ आपको यह सत्यापित करना होगा कि id_token
आपके द्वारा निर्दिष्ट होस्ट किए गए डोमेन से मेल खाता है। कुछ कार्यान्वयन के लिए इसका मतलब है कि जाँच करनाhd
है टोकन को सत्यापित करने के बाद Google से प्राप्त विशेषता की ।
पूर्ण स्टैक उदाहरण:
वेब कोड:
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(); });
});
}
});
});
सर्वर कोड (googles Node.js लाइब्रेरी का उपयोग करके):
यदि आप Node.js का उपयोग नहीं कर रहे हैं, तो आप यहां अन्य उदाहरण देख सकते हैं: 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();
});
});
};