Возможно, что у меня что-то действительно глупое, и я пропустил его в документации Google Federated Login, но как логически зарегистрирован аккаунт Google OpenID для запрашивающего сайта? Как запрашивающий сайт знает, что подробности поступают от Google, а не только кто-то вводит параметры строки запроса в URL?Защита потенциального спуфинга данных Google OpenID до запрашивающего сайта
Чтобы проиллюстрировать, я реализую базовую логическую последовательность OpenID в PHP, и все, что кажется возвращенным, представляет собой набор параметров строки запроса в URL-адресе, который я могу использовать для получения данных OpenID, что отлично работает. Проблема в том, что если я просто ввел их в адресную строку вручную без фактического входа в Google, как бы мой запрашивающий сайт знал разницу?
Во-первых, форма запроса детали:
<form method='post' action='https://www.google.com/accounts/o8/ud'>
<input type='hidden' name='openid.return_to' value='http://www.example/com/logged-in' />
<input type='hidden' name='openid.mode' value='checkid_setup' />
<input type='hidden' name='openid.ns' value='http://specs.openid.net/auth/2.0' />
<input type='hidden' name='openid.claimed_id' value='http://specs.openid.net/auth/2.0/identifier_select' />
<input type='hidden' name='openid.identity' value='http://specs.openid.net/auth/2.0/identifier_select' />
<input type='hidden' name='openid.ns.ax' value='http://openid.net/srv/ax/1.0' />
<input type='hidden' name='openid.ax.mode' value='fetch_request' />
<input type='hidden' name='openid.ax.required' value='email,firstname,lastname' />
<input type='hidden' name='openid.ax.type.email' value='http://axschema.org/contact/email' />
<input type='hidden' name='openid.ax.type.firstname' value='http://axschema.org/namePerson/first' />
<input type='hidden' name='openid.ax.type.lastname' value='http://axschema.org/namePerson/last' />
<input type='submit' value='Login With Google Account' />
</form>
... который прекрасно работает, посылая меня обратно на запрашиваемый сайт в http://www.example.com/logged-in
с целой кучей параметров URL, показанном ниже (от PHP print_r
звоните):
Array
(
[openid_ns] => http://specs.openid.net/auth/2.0
[openid_mode] => id_res
[openid_return_to] => http://www.example.com/logged-in
[openid_ext1_type_firstname] => http://axschema.org/namePerson/first
[openid_ext1_value_firstname] => {user's first name}
[openid_ext1_type_email] => http://axschema.org/contact/email
[openid_ext1_value_email] => {user's e-mail address}
[openid_ext1_type_lastname] => http://axschema.org/namePerson/last
[openid_ext1_value_lastname] => {user's last name}
)
... который является удивительным, но, как я знаю, что это на самом деле законный запрос, а не кто-то печатает в приведенных выше параметров в адресной строке?
Спасибо за любую помощь, извините, если это уже было задано (не удалось найти какие-либо реплики!), И если я упустил что-то очевидное!
Просто нет? Шутки в сторону? Вы знаете, что вы заставляете меня хотеть расследовать это сейчас, верно? ; P Я недавно столкнулся с другим аспектом использования OpenID, в частности с входами Google, называемым «nonce». В принципе, это случайное число, используемое только один раз, эти nonce могут использоваться для защиты аутентификации, но все же кажется, что заядлый хакер все еще может прыгать на него и подделывать свой путь. Спасибо, что нашли время ответить Стиву! –