GAE - 存储多个OAuth访问令牌

时间:2013-04-21 13:46:48

标签: python google-app-engine database-design oauth google-cloud-datastore

对于我正在处理的项目,我需要存储用户访问令牌(以及我假设的身份验证代码和刷新令牌)。 我正在使用GAE,我很难设计模型,这非常简单。我没有使用NoSQL的经验,因此GAE数据存储令人不安。

这是项目的全球架构

Android Mobile --- Python Server --- GAE Python Server
   |_______________________________________|

用户将使用他们的Google帐户和OAuth通过GAE服务器注册Android应用程序。然后我想我应该创建一个用户对象,通过GAE检索user_id。

之后我希望用户启用我的应用程序以访问某些云存储服务(Drive,Box,Dropbox,...)。 一旦他这样做,我将有三个令牌相对于这个服务和用户,我需要以某种方式存储它们。

相对于GAE数据存储区中的单个用户,存储多个服务的Oauth凭据的最佳方法是什么?

根据我的阅读,我可以使用Expando类并通过服务向用户实体添加服务,或者使用引用和用户实体中的列表来执行单独的实体并存储它们,... 最相关的信息GAE Credential Storage。但是我如何将它用于多种服务,从而获得凭证?

我感谢大家的帮助

---- EDIT ------------------------------

似乎我没有关于该主题研究的好关键词。 再过几个小时: GAE - Google Developer - Modeling Entity Relationships

class User(db.Model):
  name = db.StringProperty()

class ServiceOAuthAccess(db.Model):
  user = db.ReferenceProperty(User)
  service_name = db.StringProperty(choices=('Dropbox', 'Box', 'Drive'))
  ....

但是,我还有一个问题:

我可以使用com.google.api.client.auth.oauth2.Credential存储任何服务的OAuth令牌吗? 或者是Google特定的吗?

同样使用此功能,我不会使用AppEngineCredentialStore。如果我这样做会更好吗?无论如何我可以使用它吗?

1 个答案:

答案 0 :(得分:0)

似乎我没有关于该主题研究的好关键词。再过几个小时:GAE - Google Developer - Modeling Entity Relationships

class User(db.Model):
  name = db.StringProperty()

class ServiceOAuthAccess(db.Model):
  user = db.ReferenceProperty(User)
  service_name = db.StringProperty(choices=('Dropbox', 'Box', 'Drive'))
  ....