0

Google App Engine アプリケーションで Python OAuth2 デコレータを使用していました。API コンソールからクライアント シークレットを json ファイルとしてダウンロードしました。アプリを appspot.com にデプロイした後、ローカル バージョン (localhost:8080) が機能しません。decorator.has_credentials() の呼び出しは false を返します。アプリスポットのバージョンは正常に動作します。

更新: コード スニペット (簡略化)

CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')

oauth2_decorator = oauth2decorator_from_clientsecrets(
    CLIENT_SECRETS,
    scope='https://www.googleapis.com/auth/calendar',
    message=MISSING_CLIENT_SECRETS_MESSAGE)


class MyRequestHandler(webapp2.HandleRequest):
  @oauth2_decorator.oauth_aware
  def get(self):
    if oauth2_decorator.has_credentials():
      # do stuff...
    else:
      self.out.write("<html><body>Invalid credentials</body></html>")


app = webapp2.WSGIApplication([
    ('/', MyRequestHandler),
    (oauth2_decorator.callback_path, oauth2_decorator.callback_handler())
], debug=True)

更新 2 : これは私の client_secrets.json の内容であり、適切な情報は含まれていません

{"web":  
  {
    "auth_uri":"https://accounts.google.com/o/oauth2/auth",
    "client_secret":"MY_CLIENT_SECRET",
    "token_uri":"https://accounts.google.com/o/oauth2/token",
    "client_email":"MY_CLIENT_ID@developer.gserviceaccount.com",
    "redirect_uris":[
      "http://MY_APP_NAME.appspot.com",
      "http://localhost:8080"
    ],    
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/MY_CLIENT_ID@developer.gserviceaccount.com",
    "client_id":"MY_CLIENT_ID.apps.googleusercontent.com",
    "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
    "javascript_origins":[
      "http://MY_APP_NAME.appspot.com",
      "http://localhost:8080"
    ]
  }
}

ローカル マシンで「無効な資格情報」が表示されます。appspot.com で正常に動作します。アプリスポットにデプロイする前に、私のマシンで動作しました。

何が起こっている可能性がありますか?

前もって感謝します

4

1 に答える 1

0

わかりました、私はとても愚かでした。エラーではなく、初めてユーザーに認証リンクを提供するのを忘れました。

CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')

oauth2_decorator = oauth2decorator_from_clientsecrets(
    CLIENT_SECRETS,
    scope='https://www.googleapis.com/auth/calendar',
    message=MISSING_CLIENT_SECRETS_MESSAGE)


class MyRequestHandler(webapp2.HandleRequest):
  @oauth2_decorator.oauth_aware
  def get(self):
    if oauth2_decorator.has_credentials():
      # do stuff...
    else:
      self.out.write(oauth2_decorator.authorize_url())


app = webapp2.WSGIApplication([
    ('/', MyRequestHandler),
    (oauth2_decorator.callback_path, oauth2_decorator.callback_handler())
], debug=True)

今では正常に動作しています:-)。

于 2013-01-05T12:43:11.663 に答える