認証用のoauth 2.0プロバイダで残りのAPIを設定したいと思います。私はPythonを使用しています。 アプリケーションエンジンで動作するPythonでコード化されたoauth 2.0プロバイダを設定するためのライブラリはありますか?おかげさまで googleアプリケーションエンジンoauth2プロバイダ
答えて
OAuth for Pythonの商品情報をチェックしてみましたか? 「このリファレンスでは、PythonアプリケーションでOAuthをサービスプロバイダとして使用する方法について説明しています。」
OAuth2は、PythonとJava App Engineの両方のランタイムに組み込まれています。 Pythonで
に必要なものは次のとおりです。
あなたが使用するJavaではfrom google.appengine.api import oauth
# Note, unlike in the Android app below, there's no 'oauth2:' prefix here
SCOPE = 'https://www.googleapis.com/auth/userinfo.email'
# magic happens here
user = oauth.get_current_user(SCOPE)
:
OAuthService oauth = OAuthServiceFactory.getOAuthService();
// Note, unlike in the Android app below, there's no 'oauth2:' prefix here
String SCOPE = "https://www.googleapis.com/auth/userinfo.email";
// magic happens here
User user = oauth.getCurrentUser(SCOPE);
は、ここでは、ユーザーを検証することができます完全なPython 2.7ハンドラです:
from google.appengine.api import oauth
import logging
import traceback
import webapp2
class MainHandler(webapp2.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hi there!\n')
# Note, unlike in the Android app below, there's no 'oauth2:' prefix here
scope = 'https://www.googleapis.com/auth/userinfo.email'
try:
self.response.write('\noauth.get_current_user(%s)' % repr(scope))
# validates audience of the OAuth2 access token
allowed_clients = ['407408718192.apps.googleusercontent.com'] # list your client ids here
token_audience = oauth.get_client_id(scope)
if token_audience not in allowed_clients:
raise oauth.OAuthRequestError('audience of token \'%s\' is not in allowed list (%s)' % (token_audience, allowed_clients))
# gets user object for the user represented by the oauth token
user = oauth.get_current_user(scope)
self.response.write(' = %s\n' % user)
self.response.write('- auth_domain = %s\n' % user.auth_domain())
self.response.write('- email = %s\n' % user.email())
self.response.write('- nickname = %s\n' % user.nickname())
self.response.write('- user_id = %s\n' % user.user_id())
except oauth.OAuthRequestError, e:
self.response.set_status(401)
self.response.write(' -> %s %s\n' % (e.__class__.__name__, e.message))
logging.warn(traceback.format_exc())
app = webapp2.WSGIApplication([
('/.*', MainHandler)
], debug=True)
app.yamlは簡単です
application: your-app-id
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
script: main.app
クライアントは、Authorization: Bearer
HTTPリクエストヘッダーでOAuth2トークンを送信する必要があります。
Authorization: Bearer ya29XAHES6ZT4w72FecXjZu4ZWskTSX3x3OqYxUSTIrA2IfxDDPpI
あなたがAndroidアプリを構築することが起こる場合は、あなたが簡単にAccountManager
インタフェースを使用して、これらのトークンを生成することができます
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccountsByType("com.google");
// TODO: Allow the user to specify which account to authenticate with
for (Account account : accounts) {
Log.i(TAG, "- account.name = " + account.name);
}
// Note the "oauth2:" prefix here
String authTokenType = "oauth2:https://www.googleapis.com/auth/userinfo.email";
// Note: AccountManager will cache these token, even after they've expired.
// TODO: Invalidate expired tokens, either after auth fails, or preemptively via:
// accountManager.invalidateAuthToken(accounts[0].type, token);
accountManager.getAuthToken(accounts[0], authTokenType, null, this,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
Log.i(TAG, "Got KEY_AUTHTOKEN: " + token);
// Don't forget HTTP Header "Authorization: Bearer <token>"
callAppEngineRestApi(token); // <---- Your code here
} catch (OperationCanceledException e) {
Log.i(TAG, "The user has denied you access to the API");
} catch (Exception e) {
Log.i(TAG, "Exception: ", e);
}
}
}, null);
あなたはすべてを一緒に入れてもらいたい場合は、チェックアウトまでお気軽に
- https://github.com/fredsa/sauer.motivate-androidのAndroidクライアントアプリ
- :完全なソースのため、これらのプロジェクトのPython 2.7 App Engineアプリケーション
- https://github.com/fredsa/sauer.echo-headersのJava App Engineアプリケーション
あなたは本当ですか? Afaik GaeはOauth 1.0aだけをサポートしています。 – systempuntoout
私はあなたのコードはテストされましたが、それは制作物ではありません - 例外:
GoogleとStackOverflowの周りをかなり見回しました。これは私が見つけた素敵な作業コードでの唯一の答えです。 (完全な例については、付属のURLを参照してください)。 Worked for Javaも問題になりますので、質問のタイトルはJavaユーザーの誤解を招く可能性があります。 – Guy
私はこのスニペットに苦しんで、誰のためにそれをここに追加しているので、私は上記の回答にコメントすることはできません。
# magic happens here
user = oauth.get_current_user(SCOPE)
このトークンの長さがAEライブラリの問題を引き起こすため、サービスアカウントを使用している場合はAppEngineが1ヶ月間壊れています(今日ではGoogleのユーザートークンとも言えます)。 Googleはすぐにそれを修正する可能性は低いと私に言った。
これは、現時点では、私の作品唯一のものです:
token = self.request.headers['Authorization'].split(' ')[1]
url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=' + token
oauth_response = urlfetch.fetch(url)
if oauth_response.status_code != 200:
raise Exception('Unable to authorise: {}/{}'.format(oauth_response.status_code, oauth_response.content))
token_response = json.loads(oauth_response.content)
email = token_response['email']
これは何をするのですか?その背後にある論理は何ですか? – Praxiteles
GoogleレスポンスAPIを使用してベアラトークンをデコードし、レスポンスから電子メールアドレスを抽出します。 – KevH
- 1. カスタムServiceStack OAuth2プロバイダ
- 2. ステートレススプリングセキュリティoauth2プロバイダ
- 3. Spring oauth2認可プロバイダ
- 4. GoogleアプリケーションエンジンのGoogleクラウドエンドポイント
- 5. 別のoAuth2プロバイダを使用したGoogle Cloudエンドポイント
- 6. googleアプリケーションエンジンpythonログレベルノイズリダクション
- 7. インポートエラーpycrypto googleアプリケーションエンジン
- 8. Mongodb python googleアプリケーションエンジン
- 9. Googleアプリケーションエンジン:クエリ
- 10. JPA for Googleアプリケーションエンジン
- 11. Googleアプリケーションエンジンpython rot13
- 12. googleアプリケーションエンジンのビデオサイト
- 13. Googleアプリケーションエンジンとアプリスケール
- 14. アプリケーションエンジンからoauth2トークンを使用してGoogleピッカーを認証する方法
- 15. イメージexifデータgoogleアプリケーションエンジン
- 16. java.lang.NoClassDefFoundError googleアプリケーションエンジンとメイヴェン
- 17. Googleアプリケーションエンジンのyamlハンドラー
- 18. GoogleアプリケーションエンジンでDjangoフォームプレビュー
- 19. GoogleアプリケーションエンジンHTTPエラー500
- 20. Googleアプリケーションエンジンのdjangoアップロードファイルエラー
- 21. 自動リダイレクトgoogleアプリケーションエンジン
- 22. Googleアプリケーションエンジンのインストールjava
- 23. Googleアプリケーションエンジンのみデータベースストア
- 24. googleアプリケーションエンジンのCUPP(ペンテスト)
- 25. GoogleアプリケーションエンジンDTO to JDO
- 26. Googleのアプリケーションエンジンのmemcache
- 27. Rails 3. oauth2プロバイダを構築する
- 28. カスタム認証を使用するOAuth2プロバイダ
- 29. passportjs google oauth2 strategy
- 30. Google oAuth2 AuthMissingParameter
完全にグーグルに依存し、私の認証を行い、認証なく、私のサービスのためのGoogleを使用しています! – neo
次に、PythonでOAuthを完全に実装するには、[python-oauth2](https://github.com/simplegeo/python-oauth2)を参照してください。 –
名前にもかかわらず、それはoauth 1.0プロバイダだけを作成するために使用できると思います – neo