Phía khách hàng:
Sử dụng auth2
hàm init, bạn có thể chuyển hosted_domain
tham số để hạn chế các tài khoản được liệt kê trên cửa sổ bật lên đăng nhập cho những tài khoản phù hợp với của bạn hosted_domain
. Bạn có thể xem điều này trong tài liệu tại đây: https://developers.google.com/identity/sign-in/web/reference
Phía máy chủ:
Ngay cả với danh sách phía máy khách bị hạn chế, bạn sẽ cần xác minh rằng các id_token
tên miền khớp với miền được lưu trữ mà bạn đã chỉ định. Đối với một số triển khai, điều này có nghĩa là kiểm tra hd
thuộc tính bạn nhận được từ google sau khi xác minh mã thông báo.
Ví dụ về ngăn xếp đầy đủ:
Mã 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(); });
});
}
});
});
Mã máy chủ (sử dụng thư viện Node.js của googles):
Nếu không sử dụng Node.js, bạn có thể xem các ví dụ khác tại đây: 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();
});
});
};