2

Мы используем API хранения облачных значений GAE для создания и доступа к файлам. Мы использовали gsutil для добавления нашей учетной записи службы приложения gae в ACL по умолчанию для ведра.Может ли приложение GAE получить доступ к облачному хранилищу RESTful API без танка OAuth?

Следующий шаг - это делать такие вещи, как перечисление содержимого ведра. Для этого API RESTful с доступом OAuth кажется жизнеспособным вариантом. Однако, чтобы получить доступ к облачному хранилищу из задачи, мы хотим избежать шага «согласия пользователя» в танце OAuth. Консоль API позволяет добавить идентификатор клиента для учетной записи службы для этой цели, но мы не можем найти какую-либо документацию или образцы использования учетной записи службы для доступа к API.

До сих пор мы рассмотрели приложение Au-to-do (требуется танец OAuth) и образцы google-api-python-client. Ни один из них не показывает доступ к учетной записи службы по умолчанию.

Есть ли примеры использования учетной записи службы движка приложения для авторизации запросов к облачному хранилищу RESTful API?

+0

Почему вы хотите использовать остающийся API, когда App Engine уже имеет встроенный API для прямого доступа к облачному хранилищу? –

+0

Встроенный API не позволяет мне перечислять содержимое ведра. – Yasser

ответ

2

Доступ к облачному хранилищу Google осуществляется с помощью интероперабельного доступа, при этом обеспечивается доступ к взаимодействию с ключом доступа и секретным ключом для доступа к вашим ковши.
Процесс described in great details, и вы можете увидеть пример кода, который реализует процесс в boto пакете (искать HmacAuthV1Handler в auth.py)

1

Я предполагаю, что вы это видели?

Я не использовал этот API, но использовал другие API-интерфейсы с OAuth в App Engine, сохранив аутентифицированный токен OAuth в хранилище данных. Аналогичное решение может работать и на вас.

1

Самый простой способ использовать REST API, не делая OAuth танец будет использовать GAE App Identity, чтобы получить токен доступа, а затем использовать токен доступа для доступа к облачному хранилищу Google. В любом случае вам нужно будет добавить форму электронной почты Identity приложения в проект Google Cloud Storage, как описано в разделе предварительных условий документации Files API for Google Cloud Storage (вам нужно будет сделать это, даже если вы не используете API файлов, так как это настраивает ваш проект, чтобы приложение App Engine могло получить к нему доступ).

4

Я собираюсь опубликовать небольшой образец, который точно иллюстрирует то, о чем вы спрашиваете: как использовать учетные данные учетной записи службы App Engine для доступа к облачному хранилищу Google (в частности, чтобы отобразить ведро Google Cloud Storage с форматированием) , При наличии, это будет часть https://code.google.com/p/google-api-python-client/ репо, но, в то же время, вот код:

import httplib2 
import logging 
import os 
import pickle 
import re 

from google.appengine.api import memcache 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 
from google.appengine.ext.webapp.util import run_wsgi_app 
from oauth2client.appengine import AppAssertionCredentials 

# Constants for the XSL stylesheet and the Google Cloud Storage URI. 
XSL = '\n<?xml-stylesheet href="/listing.xsl" type="text/xsl"?>\n'; 
URI = 'http://commondatastorage.googleapis.com' 

# Obtain service account credentials and authorize HTTP connection. 
credentials = AppAssertionCredentials(
    scope='https://www.googleapis.com/auth/devstorage.read_write') 
http = credentials.authorize(httplib2.Http(memcache)) 

class MainHandler(webapp.RequestHandler): 

    def get(self): 
    try: 
     # Derive desired bucket name from path after domain name. 
     bucket = self.request.path 
     if bucket[-1] == '/': 
     # Trim final slash, if necessary. 
     bucket = bucket[:-1] 
     # Send HTTP request to Google Cloud Storage to obtain bucket listing. 
     resp, content = http.request(URI + bucket, "GET") 
     if resp.status != 200: 
     # If error getting bucket listing, raise exception. 
     err = 'Error: ' + str(resp.status) + ', bucket: ' + bucket + \ 
       ', response: ' + str(content) 
     raise Exception(err) 
     # Edit returned bucket listing XML to insert style sheet for nice 
     # formatting and send results to client. 
     content = re.sub('(<ListBucketResult)', XSL + '\\1', content) 
     self.response.headers['Content-Type'] = 'text/xml' 
     self.response.out.write(content) 
    except Exception as e: 
     self.response.set_status(404) 
     self.response.out.write(str(e)) 

def main(): 
    application = webapp.WSGIApplication(
     [ 
     ('.*', MainHandler), 
     ], 
     debug=True) 
    run_wsgi_app(application) 

if __name__ == '__main__': 
    main() 

Этот код зависит от листа XSLT стиля. Вы можете закомментировать ссылки на XSL, чтобы устранить эту зависимость, или включать в себя следующий файл в проекте (с именем listing.xsl):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ama="http://doc.s3.amazonaws.com/2006-03-01"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2><a href="http://developer.google.com/storage">Google Cloud Storage</a> Con 
tent Listing for Bucket 
     <xsl:value-of select="ama:ListBucketResult/ama:Name"/></h2> 
    <table border="1" cellpadding="5"> 
     <tr bgcolor="#9acd32"> 
     <th>Object Name</th> 
     <th>Modification Time</th> 
     <th>ETag</th> 
     <th>Size</th> 
     <th>Storage Class</th> 
     </tr> 
     <xsl:for-each select="ama:ListBucketResult/ama:Contents"> 
     <tr> 
     <td><xsl:value-of select="ama:Key"/></td> 
     <td><xsl:value-of select="ama:LastModified"/></td> 
     <td><xsl:value-of select="ama:ETag"/></td> 
     <td><xsl:value-of select="ama:Size"/></td> 
     <td><xsl:value-of select="ama:StorageClass"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 
+0

Как это можно протестировать на devserver? –

1

Google теперь предлагает Подписанные URL (Строка запроса аутентификации) режим доступа Cloud Storage ковши. Это позволяет учетным записям служб пропускать танец OAuth и доступ к информации о вебе с подписанным URL. Проверьте это.

 Смежные вопросы

  • Нет связанных вопросов^_^