我可以使用OAUTH2装饰器来登录我的app引擎应用程序

时间:2012-10-15 12:15:56

标签: python google-app-engine oauth-2.0 decorator

我有一个Python GAE应用程序,它为用户提供了一个HTML登录页面。此页面包含用于登录我的应用程序的oauth2登录链接(response_type = code)。链接如下所示:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state=%2Fprofile&redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Foauthcallback&response_type=code&client_id=812741506391.apps.googleusercontent.com

用户允许访问后,GAE应用程序会收到如下回调:

https://oauth2-login-demo.appspot.com/oauthcallback?code={authorizationCode}

我的问题:

  • 我可以使用Python oauth2装饰器来处理此回调=交换访问令牌的授权码。

  • 我是否还可以使用装饰器为我的HTML页面创建oauth2登录链接。

我正在使用此流程:https://developers.google.com/accounts/docs/OAuth2Login

装饰者:https://developers.google.com/api-client-library/python/platforms/google_app_engine 谢谢你的帮助。

更新:我想通了

login.py

from google.appengine.api import users
from oauth2client.appengine import OAuth2DecoratorFromClientSecrets

decorator = OAuth2DecoratorFromClientSecrets(
      os.path.join(os.path.dirname(__file__), 'client_secrets.json'), 'https://www.googleapis.com/auth/userinfo.email')


class LoginHandler(BaseHandler):

    @decorator.oauth_aware        
    def get(self):

        if decorator has credentials :
            http = httplib2.Http()        # verify audience using the TokenInfo API
            body = urllib.urlencode({'access_token': decorator.credentials.access_token})
            resp, content = http.request("https://www.googleapis.com/oauth2/v1/tokeninfo",method="POST", body=body)
            ....   # render template and show the user info from the TokenInfo response
        else:
            login_url = decorator.authorize_url()
            ....   # render template and show the login_url

为了处理回调,我必须在我的

中添加两行

的app.yaml:

- url: /oauth2callback
  script: oauth2client/appengine.py

- url: .*
  script: login.py

0 个答案:

没有答案