2015-10-05 4 views
1

Я пытаюсь включить google-вход на веб-страницу. Я следовал документации и я использую этот скрипт:Google подпишут Google ID

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 Apps для работы gmail). Как только он будет проверен, я хочу сделать php-сообщение для другого API, но любые проверки, которые я могу думать о создании на заднем конце, мне очень легко обманывают. Я вижу, что есть библиотека php для аутентификации токенов here, но я не знаю, что я должен делать с этим. Кто-нибудь может дать мне указатель?

[EDIT: информация добавляется ниже]

Итак, ответ я получаю обратно объект 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" 
} 

Теперь, в соответствии с this Мне все еще нужно проверить, что требование аудита содержит один из идентификаторов клиента моего приложения, и я также могу проверить, что хостинг-домен (hd-ключ здесь) соответствует нашему домену.

Итак, вопрос будет: если я отправлю этот объект JSON на php-страницу через ajax, сравните строки в объекте с теми, которые я получаю от консоли разработчика - я предполагаю, используя strcmp() - это то, что все, что мне нужно сделать? И если они совпадают, сделайте то, что я хотел сделать (назовите другой API и т. Д. И т. Д.)?

Извините за чрезмерность. У меня почти нулевой опыт аутентификации php и serveride, и я действительно понятия не имею, как легко было бы подменять такую ​​систему. Я предполагаю, что это может выглядеть безопасно, но оставить дверь открытой для того, кто хочет пробраться. Спасибо за любой совет.

+0

@deek - Почему даже рекомендую это? Код на 100% доступен для чтения, и они делают все просто отлично. Это не проблема ajax. С вашей рекомендацией у них будет все тот же вопрос: «Что делать с данными». – Jesse

+1

проверьте этот https://developers.google.com/api-client-library/php/auth/web-app – sandeepsure

+0

Lucas, можете ли вы рассказать нам, что выводится на консоль (удаление личной информации)? – Jesse

ответ

1

так, в случае, если кто-то считает, что это в какой-то позже, вот что я в конечном итоге делает (предостережение: я понятия не имею, если это самый безопасный способ, но мне кажется, нормально для меня) ...

  1. разместил id_token на мою страницу PHP
  2. отправил токен к https://www.googleapis.com/oauth2/v3/tokeninfo через завиток
  3. получил объект ответа назад от завитка, проверил его против ауд и HD с простыми === сравнения
  4. , если они проверяют, делают ли API вещи

Я надеюсь, что это поможет кому-то. Если что-то катастрофически неправильно с этим подходом, пожалуйста, дайте мне знать!

Смежные вопросы