OpenIDは、リダイレクト透過的な方法で設計されています。GETまたはPOSTのいずれかによって、必要なキーと値のペアが各リダイレクトで保持されている限り、すべてが正しく動作します。
自己署名証明書を使用しないコンシューマーとの互換性を実現する最も簡単なソリューションは、暗号化されたエンドポイントにメッセージをリダイレクトcheckid_immediate
するcheckid_setup
暗号化されていないエンドポイントを使用することです。
サーバーコードでこれを行うことは、Webサーバーリダイレクトを使用するよりも簡単です。前者は、コードをまとめながら、POST要求をより簡単に処理できるためです。さらに、適切なチェックが行われている限り、SSLを介して提供する必要があるかどうかに関係なく、同じエンドポイントを使用してすべてのOpenID操作を処理できます。
たとえば、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']}");
値はプレーンなHTTPエンドポイントに対して生成されたopenid.return_to
ため、コンシューマーに関する限り、暗号化されていないサーバーのみを処理します。セッションとナンスを使用したOpenID2.0の適切な動作を想定すると、コンシューマーとサーバーの間で受け渡される情報が悪用可能な情報を明らかにすることはありません。悪用可能なブラウザとOpenIDサーバー間の操作(パスワードスヌーピングまたはセッションCookieハイジャック)は、暗号化されたチャネルを介して行われます。
盗聴者を排除する以外に、SSLを介して認証操作を実行することで、secure
HTTPcookieフラグを使用できます。checkid_immediate
これにより、必要に応じて、操作をさらに保護するレイヤーが追加されます。