我正在使用Google Cloud Endpoints制作REST API。
我的API提供Google日历活动等活动服务。
但我的事件模型具有与谷歌日历不同的其他属性。
所以我想将其他属性存储到我的数据存储区中。
其他人存储Google Calendar API。
顺便说一下,我不知道OAuth2如何使用Google API Python客户端进行身份验证。
decorator = OAuth2Decorator(
client_id='',
client_secret='',
scope='https://www.googleapis.com/auth/calendar')
service = build('calendar', 'v3')
@space_api.api_class(resource_name='events')
class EventsApi(remote.Service):
@endpoints.method(EVENT_RESOURCE, EventMessage,
path='events', http_method='POST',
name='events.insert')
@decorator.oauth_required
def events_insert(self, request):
event = service.events().insert(calendarId='primary', body=encode_message(request)).execute(http=decorator.http())
return decode_message(EventMessage, event)
我使用的是OAuth2Decorator,但remote.Service类没有重定向方法。
所以它会导致错误。
如何在Google Cloud Endpoints中使用Google API Python客户端。
请告诉我如何验证OAuth2。
欢迎任何评论,例如文档链接。
答案 0 :(得分:0)
要创建API,其中该API的方法需要身份验证,请通过文档[1]。您想创建一个需要使用docs [2]进行身份验证的API。要在Google API Python客户端中使用OAuth,请查看文档[3]。
[1] https://cloud.google.com/appengine/docs/python/endpoints/getstarted/backend/auth
[2] https://cloud.google.com/appengine/docs/python/endpoints/auth
[3] https://cloud.google.com/appengine/docs/python/endpoints/access_from_python
答案 1 :(得分:0)
您需要将OAuth 2.0用于服务器到服务器应用程序。由于您使用的是Google云端点和App引擎,因此您可以使用AppAssertionCredentials对Google Calendar API进行授权API调用。以下是修改后的代码:
from oauth2client.appengine import AppAssertionCredentials
credentials = AppAssertionCredentials('https://www.googleapis.com/auth/calendar')
http_auth = credentials.authorize(Http())
calendar_service = build('calendar', 'v3', http=http_auth)
@space_api.api_class(resource_name='events')
class EventsApi(remote.Service):
@endpoints.method(EVENT_RESOURCE, EventMessage,
path='events', http_method='POST',
name='events.insert')
def events_insert(self, request):
event = service.events().insert(calendarId='primary', body=encode_message(request)).execute(http_auth)
return decode_message(EventMessage, event)
您可以在此处找到更多详细信息:
https://developers.google.com/api-client-library/python/auth/service-accounts#callinganapi