OpenID разработан с прозрачным перенаправлением. Пока необходимые пары ключ / значение сохраняются при каждом перенаправлении, либо GET, либо POST, все будет работать правильно.
Самым простым решением для обеспечения совместимости с потребителями, которые не работают с самозаверяющими сертификатами, является использование незашифрованной конечной точки, которая перенаправляет сообщения checkid_immediate
и checkid_setup
в зашифрованную.
Делать это в коде вашего сервера проще, чем при перенаправлениях с веб-сервера, поскольку первый может легче обрабатывать запросы POST, а также хранить код вместе. Кроме того, вы можете использовать одну и ту же конечную точку для обработки всех операций OpenID, независимо от того, следует ли обслуживать их по SSL, если выполняются надлежащие проверки.
Например, в PHP перенаправление может быть простым:
// Redirect OpenID authentication requests to https:// of same URL
// Assuming valid OpenID operation over GET
if (!isset($_SERVER['HTTPS']) &&
($_GET['openid_mode'] == 'checkid_immediate' ||
$_GET['openid_mode'] == 'checkid_setup'))
http_redirect("https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
Поскольку значение openid.return_to
было сгенерировано для простой конечной точки HTTP, для потребителя оно имеет дело только с незашифрованным сервером. При условии правильной работы OpenID 2.0 с сеансами и одноразовыми номерами, любая информация, передаваемая между потребителем и вашим сервером, не должна раскрывать эксплуатируемую информацию. Операции между вашим браузером и сервером OpenID, которые могут использоваться (отслеживание пароля или перехват файлов cookie сеанса), выполняются по зашифрованному каналу.
Помимо защиты от прослушивателей, выполнение операций аутентификации по SSL позволяет использовать флаг cookie HTTP secure
. Это добавляет еще один уровень защиты для операций checkid_immediate
, если вы хотите разрешить его.