0

Google App Engine で実行されている Python アプリケーションへのログインを、OpenID を使用して特定の Google Apps ドメインのメンバーに制限したいと考えています。

スレッドによると、Google Federated Login を特定の Apps ドメインに制限するにはどうすればよいですか? これは、通常の Google openid 認証 URL を置き換えるだけで実現できます。

https://www.google.com/accounts/o8/id

https://google.com/accounts/o8/site-xrds?hd=example.com

ただし、これは GAE for Python で users.create_login_url() を使用しても機能しないようです。Google アプリ エンジンのログには表示されない 500 サーバー エラーがスローされます (ログには、logging.debug からのリダイレクトと "OpenID" のみが表示されます)。

これを修正する方法について何か提案はありますか?

app.yaml

application: example
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /_ah/login_required
  script: main.app

- url: .*
  script: main.app
  login: required

main.py:

import webapp2, logging
from google.appengine.api import users

# Any google account, works like a charm
#federated_identity='https://www.google.com/accounts/o8/id'

# only accounts under spefific domain, does not work
federated_identity='https://google.com/accounts/o8/site-xrds?hd=example.com'

dest_url = 'http://example.appspot.com/'

class Main(webapp2.RequestHandler):
    def get(self):
        logging.debug('Main')
        user = users.get_current_user()
        if user:
            self.response.out.write('Hello %s<p>[<a href="%s">log out</a>]' %  (user.email(),
                    users.create_logout_url(self.request.uri)))
        else:
            self.response.out.write('Not logged in')

class OpenID(webapp2.RequestHandler):
    def get(self):
        logging.debug('OpenID')
        login_url = users.create_login_url(dest_url=dest_url,
            federated_identity=federated_identity)
        self.redirect(login_url)

app = webapp2.WSGIApplication([
    ('/_ah/login_required', OpenID),
    ('/', Main)
], debug=True)

Update
Sebastian は、フェデレーション ID を URL エンコードすることで解決できる可能性があることを示唆しています。提案されているように、URL全体または疑問符のみをURLエンコードしてみました。残念ながら、これは何も変わりません。ブラウザーのアドレス バーに表示されるリダイレクト URL、またはログに書き込まれた場合のリダイレクト URL:

URL エンコードなし:
http://example.appspot.com/_ah/login_redir?claimid=https://google.com/accounts/o8/site-xrds?hd=example.com&continue=http://example.appspot。 com/

URL エンコードあり:
http://example.appspot.com/_ah/login_redir?claimid=https%3A%2F%2Fgoogle.com%2Faccounts%2Fo8%2Fsite-xrds%3Fhd%3Dexample.com&continue=http://example. appspot.com/

4

1 に答える 1

0

問題は federated_identity がエンコードされていないためだと思います (私はこれを自分でテストしていません)。疑問符を に置き換えてみてください%3F。また、URLを確認してください

https://google.com/accounts/o8/site-xrds?hd=example.com

動作します。

私が行ったテストは、URLにアクセスすることでした

http://testsk2012.appspot.com/_ah/login_redir?claimid=https://www.google.com/accounts/o8/site-xrds%3Fhd=somesite.com&continue=http://testsk2012.appspot.com/

そしてそれは成功しました。

于 2013-02-01T00:34:19.273 に答える