Chcę skonfigurować api odpoczynku z dostawcą Oauth 2.0 do uwierzytelniania. Używam Pythona. Czy istnieje biblioteka do konfigurowania dostawcy Oauth 2.0 zakodowanego w pythonie, który działa na silniku aplikacji? Dzięki.Operator wyszukiwarki Google oauth2 dostawca
Odpowiedz
Czy zapoznałeś się z artykułem o OAuth for Python? Mówi, że jest tak "W tym odwołaniu opisano, jak używać OAuth z aplikacjami Python jako dostawcy usług."
Obsługa OAuth2 w obu środowiskach wykonawczych Python i Java App Engine.
W Pythonie wszystko czego potrzebujesz to:
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)
W Javie należałoby użyć:
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);
Oto pełna Python 2.7 teleskopowa, która pozwoli zweryfikować użytkownika:
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)
Aplikacja.yaml jest banalna
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
Należy zauważyć, że klient powinien wysłać token OAuth2 w nagłówku żądania HTTP Authorization: Bearer
, np.
Authorization: Bearer ya29XAHES6ZT4w72FecXjZu4ZWskTSX3x3OqYxUSTIrA2IfxDDPpI
Jeśli zdarzy ci się być budowanie aplikacji na Androida, można łatwo wygenerować te znaki za pomocą interfejsu 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);
Jeśli chcesz zobaczyć wszystko ułożyła, prosimy o kasie projekty te dotyczące pełnego źródła:
- https://github.com/fredsa/sauer.motivate-android Android app klient
- https://github.com/fredsa/sauer.motivate-appengine Python 2.7 App App Engine
- https://github.com/fredsa/sauer.echo-headers Java App App Engine
jesteś pewien? Afaik Gae obsługuje tylko Oauth 1.0a – systempuntoout
Zostałem przetestowany, ale kod nie działa - Exception:
Rozglądałem się wokół Google i StackOverflow. Jest to jedyna odpowiedź z dobrze działającym kodem, który znalazłem. (patrz kompletny przykład podanych adresów URL). Też pracowałem dla Javy, dlatego tytuł pytania może wprowadzać użytkowników java w błąd. – Guy
nie mogę wypowiedzieć się na temat powyższej odpowiedzi więc dodałem go tutaj dla każdego, kto zmaga się z tym fragmencie:
# magic happens here
user = oauth.get_current_user(SCOPE)
ten został złamany na AppEngine przez miesiąc, jeśli korzystasz z kont serwisowych (i od dzisiaj, myślę także tokenów użytkownika Google), ponieważ długość tokena powoduje problemy w bibliotece AE. Google powiedział mi, że jest mało prawdopodobne, aby to naprawić wkrótce.
Jest to jedyna rzecz, która pracuje dla mnie w tej chwili:
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']
Co to oznacza? Jaka jest logika? – Praxiteles
Używa apletu Google google do "odkodowania" tokena okaziciela, wyodrębniając adres e-mail z odpowiedzi. – KevH
- 1. Alternatywa niestandardowej wyszukiwarki Google
- 2. Bezpośredni link do wyszukiwarki Google
- 3. Google OAuth2 redirect_uri_mismatch Issue
- 4. Google OAuth2 przykład wiersza polecenia
- 5. Google oAuth2 nieautoryzowany_klient przez refresh_token
- 6. Google Guice: Dostawca z parametrami
- 7. Dostawca OAuth2 dla Scalatra lub Play framework w Scali
- 8. Interfejs API wyszukiwarki Google dla języka C#
- 9. Zewnętrzna baza danych wyszukiwarki aplikacji Google
- 10. Interfejs API wyszukiwarki Google App Engine
- 11. Funkcja autouzupełniania interfejsu API wyszukiwarki niestandardowej Google?
- 12. Yeoman, aby użyć serwera wyszukiwarki aplikacji Google
- 13. LightOpenID z nowym systemem OAuth2 Google
- 14. Cordova aplikacja google OAuth2 nieważny Cookiem
- 15. Google OAuth2 Zaloguj się do angularjs zwrotnego
- 16. Czy mój token Google oAuth2 wygląda prawidłowo?
- 17. JWT "invalid_grant" w Podpisie w Google OAuth2
- 18. Google Drive Realtime API OAuth2 Refresh Errors
- 19. Google OAuth2 - isAccessTokenExpired() zawsze jest prawdziwe
- 20. Python Oauth2 - zaloguj się za pomocą Google
- 21. Google oauth2 i 400 złe żądanie: błąd po stronie Google?
- 22. Jaki jest cel przodków w magazynie danych wyszukiwarki Google?
- 23. Jak zastąpić equals() w modelu modelu danych silnika wyszukiwarki Google?
- 24. Czy można przechwycić wyszukiwane hasło z wyszukiwarki Google?
- 25. Interfejs API wyszukiwarki niestandardowej Google dla obrazów kwadratowych
- 26. Kroki korzystania z niestandardowego interfejsu API wyszukiwarki Google w .NET
- 27. Ndb wyszukiwarki aplikacji Google: używając identyfikatora lub nazwy klucza?
- 28. Interfejs API wyszukiwarki osób w Google+ nie zwraca żadnych elementów.
- 29. Dysk VM wyszukiwarki Google Engine jest bardzo wolny.
- 30. Rest, Spring własny serwer OAuth2 + dostawcy OAuth2, tacy jak Facebook, Google, Yahoo
że używa Google dla uwierzytelniania nie mój serwis, który sprawia, że moje uwierzytelniania całkowicie uzależnione od Google! – neo
Następnie spójrz na [python-oauth2] (https://github.com/simplegeo/python-oauth2), aby uzyskać pełną implementację protokołu OAuth w języku Python. –
Myślę, że pomimo nazwy może być używany do tworzenia tylko 0 dostawców OIDh – neo