8

Google Federated Login をプレミア アプリ アカウントと統合しようとしていますが、いくつか問題があります。

https://www.google.com/accounts/o8/udすべてのパラメーター (以下を参照) を指定してにリクエストを送信すると、request_tokenと によって要求された属性のリストが返されAttribute Exchangeます。アプリケーション データベースにユーザーを保存するために属性交換 (AX) 経由で電子メールが必要であり、将来の要求トークンAPI requests to scopes(つまり、カレンダー、連絡先など) が必要なため、これは完璧です。

ただし、その URL (ここでは と呼びます) を使用すると、ユーザーがホストされているendpointアプリ (gmail、カレンダーなど) にサインインしたままにならないという問題があります。

エンドポイントを変更すると、すべてがhttps://www.google.com/a/thedomain.com/o8/ud?be=o8変わります。他の Google アプリ (gmail など) に自動的にサインインします。ただし、そのエンドポイントを使用すると、AX 経由でリクエスト トークンまたは属性のみを取得できます。明らかにそれは特にハイブリッドではありません。そのどちらかです。

エンドポイントへのリクエスト例https://www.google.com/accounts/o8/ud

parameters = {
    'openid.ns': 'http://specs.openid.net/auth/2.0',
    'openid.claimed_id': 'http://specs.openid.net/auth/2.0/identifier_select',
    'openid.identity': 'http://specs.openid.net/auth/2.0/identifier_select',
    'openid.return_to':'http://our.domain.com/accounts/callback/',
    'openid.realm': 'http://our.domain.com/',
    'openid.assoc_handle': assoc_handle,
    'openid.mode': 'checkid_setup',

    'openid.ns.ext2': 'http://specs.openid.net/extensions/oauth/1.0',
    'openid.ext2.consumer': 'our.domain.com',
    'openid.ext2.scope': 'https://mail.google.com/mail/feed/atom',

    'openid.ns.ax':'http://openid.net/srv/ax/1.0',
    'openid.ax.mode':'fetch_request',
    'openid.ax.required':'firstname,lastname,email',
    'openid.ax.type.firstname':'http://axschema.org/namePerson/first',
    'openid.ax.type.lastname':'http://axschema.org/namePerson/last',
    'openid.ax.type.email':'http://axschema.org/contact/email',     
}
return HttpResponseRedirect(end_point + '?' + urllib.urlencode(parameters))

(assoc_handle は以前に openid 初期要求によって正常に設定されています)

私は、このハイブリッド アプローチを機能させるために何日も苦労してきました。最も不透明なエラー メッセージ ( This page is invalid... Google に感謝します) と一貫性のあるドキュメントの欠如と戦っています。この時点に到達するために、できる限りすべてのコード サンプルを調べました。任意の助けをいただければ幸いです...

4

1 に答える 1

7

記録、後世、およびこれを混乱させる可能性のある他の人のために、私は(ばかげた)答えを文書化します.

最終的に、問題は次の呼び出しでした。

return HttpResponseRedirect(
    'https://www.google.com/a/thedomain.com/o8/ud?be=o8'
    + '?'
    + urllib.urlencode(parameters)
)

あなたはそれを見つけることができますか?ええ、問題を引き起こしたのは疑問符を明示的に含めることでした。2 つのクエリ文字列が同時に存在することはありません。

于 2009-10-30T16:44:30.270 に答える