外部ユーザーシステム(username / email / sessionId)を備えたGoogle Chrome拡張機能があり、ユーザーは自分で選択した資格情報(SSL経由)を使用してログインできます。これを次のようにGoogleOpenIDログインを使用するように変更したいと思います。
- ユーザーが[Google経由でログイン]をクリックします。
- 拡張機能は
checkid_immediate
*ログイン要求を実行します:checkid_immediate
ログインに失敗した場合 :checkid_setup
拡張機能は、 **ログイン(および電子メールフェッチ)用に指定されたパラメーターで新しいタブを開きます。- ユーザーがアカウントを選択し、私のサービスを承認します。
- リターンページで、OpenIDIDと電子メールをデータベースに保存します。
- Javascriptでタブを閉じます。
- それ以外の場合は成功し、 OpenIDID
checkid_immediate
が返されます。- データベースでOpenIDIDを探すことにより、どのユーザーを特定します。
sessionId
ユーザーにログインして、通常どおりに設定します。
私が理解している限りx-has-session
、現在ログインしているユーザーのOpenIDを取得できます(以前にサービスにログインの使用を許可している場合)が、応答は常にopenid_mode=setup_needed
です。
テストに自分のアカウントを使用すると、新しいtabcheckid_setup
メソッドを使用して承認し、checkid_immediate
XmlHttpRequestから正常な応答を得ることができます。ただし、これは、Googleから取得したOpenIDをopenid.claimed_id
andopenid.identity
パラメーターに挿入した場合にのみ可能です。
openid.identity
およびopenid.ui.mode
パラメータに関係なく、要求は成功します。
私は自分に何ができるかを完全に誤解しましたx-has-session
か?
はいの場合、checkid_immediate
(新しいタブで開かずに)拡張機能からリクエストを実行する唯一の方法は、リクエストの実行時に取得したOpenID識別子を介して実行することcheckid_setup
ですか?
*checkid_immediate
リクエストパラメータ(XMLHttpRequestを使用してPOSTリクエストとして送信されます):
var endpoint = "https://www.google.com/accounts/o8/ud";
var openIdParameters = {
"openid.ns": "http://specs.openid.net/auth/2.0",
"openid.mode": "checkid_immediate",
"openid.return_to": "http://example.com/googleAuth.php",
"openid.realm": "http://example.com",
"openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
"openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
"openid.ns.ui": "http://specs.openid.net/extensions/ui/1.0",
"openid.ui.mode": "x-has-session"
};
URLでopenid.return_to
私が行うのはjson_encode($_REQUEST)
、XmlHttpRequestの応答としてフェッチされるecho(GET / POST変数のみ、Cookieは含まれていません)だけです。
*checkid_setup
リクエストパラメータ(新しいタブで開きます):
var endpoint = "https://www.google.com/accounts/o8/ud";
var openIdParameters = {
"openid.ns": "http://specs.openid.net/auth/2.0",
"openid.mode": "checkid_setup",
"openid.return_to": "http://example.com/googleAuth.php",
"openid.realm": "http://example.com",
"openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
"openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
"openid.ns.ax": "http://openid.net/srv/ax/1.0",
"openid.ax.mode": "fetch_request",
"openid.ax.required": "email",
"openid.ax.type.email": "http://axschema.org/contact/email"
};