Я пытаюсь включить вход Google на веб-страницу. Я следил за документацией и использую этот скрипт:
function onSignIn(googleUser) {
var id_token = googleUser.getAuthResponse().id_token;
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token='+id_token);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
console.log('Signed in as: ' + xhr.responseText);
};
xhr.send('idtoken=' + id_token);
}
Я не совсем понимаю следующий бит — я вижу объект responseText, но что мне с ним делать? Я только хочу убедиться, что пользователь из нашей работы, то есть имеет адрес электронной почты из нашего домена (это приложения Google для работы Gmail). Как только он будет проверен, я хочу сделать php-сообщение для другого API, но любые виды проверок, которые я могу придумать на бэкэнде, кажутся мне очень легко подделать. Я вижу, что есть php библиотека для аутентификации токенов Вот но я тоже не знаю, что мне с этим делать. Кто-нибудь может дать мне указатель?
[РЕДАКТИРОВАТЬ: информация добавлена ниже]
Итак, ответ, который я получаю, — это объект JSON, подобный этому (значимые значения заменены случайными строками):
{
"iss": "accounts.google.com",
"at_hash": "e2CYheQnJjpBfyS2StkM9D",
"aud": "168479532489-Y23kc3sHhn9frJ65Bwtx8Ff4Xdq5RqSH.apps.googleusercontent.com",
"sub": "56798241598765321849762",
"email_verified": "true",
"azp": "168479532489-Y23kc3sHhn9frJ65Bwtx8Ff4Xdq5RqSH.apps.googleusercontent.com",
"hd": "example.com",
"email": "[email protected]",
"iat": "1444085795",
"exp": "1444089395",
"name": "Lucas Smith",
"given_name": "Lucas",
"family_name": "Smith",
"locale": "en",
"alg": "GU788",
"kid": "jyaKrpekvYhcRx6KpYSbKhAdYYScLNbEqxqMfCY7"}
Теперь согласно этот Мне все еще нужно проверить, что утверждение aud содержит один из идентификаторов клиента моего приложения, и я также могу проверить, что размещенный домен (ключ hd здесь) соответствует нашему домену.
Итак, возникает вопрос: если я отправлю этот объект JSON на страницу php через ajax, то сравню строки в объекте с теми, что я получаю из консоли разработчика — я предполагаю, используя strcmp()
— это все, что мне нужно сделать? И если они совпадают, делайте то, что я хотел сделать (вызывать другой API и т. Д. И т. Д.)?
Извините за переутомление. У меня почти нулевой опыт аутентификации на php и серверах, и я действительно не представляю, как легко было бы подменить такую систему. Я думаю, это может выглядеть безопасно, но оставить дверь широко открытой для того, кто хочет проникнуть внутрь. Спасибо за любой совет.
Итак, на случай, если кто-нибудь найдет это позже, вот что я закончил (предостережение: я понятия не имею, является ли это самым безопасным способом, но мне кажется, что все в порядке) …
https://www.googleapis.com/oauth2/v3/tokeninfo
через завиток===
сравненияНадеюсь, это кому-нибудь поможет. Если с этим подходом что-то не так, пожалуйста, дайте мне знать!
Других решений пока нет …