我可以使用Javascript客户端从Google Cloud Endpoints获取博客帖子列表:
gapi.client.blog.posts.list().execute(function (resp) {
console.log(resp);
});
Run Code Online (Sandbox Code Playgroud)
但我需要在Google Cloud Endpoints请求中设置包含用户令牌的自定义标头值(这可能是来自Facebook的访问令牌).如何使用Google的Javascript客户端执行此操作?我可以通过不使用谷歌的Javascript客户端解决这个问题,但我宁愿使用它.
https://developers.google.com/appengine/docs/java/endpoints/consume_js https://developers.google.com/api-client-library/javascript/reference/referencedocs
编辑
看来我可以像这样传递自定义标头值:
gapi.auth.setToken({
access_token: 'this is my custom value'
});
Run Code Online (Sandbox Code Playgroud)
虽然看起来不是很好的做法.有一个更好的方法吗?
假设我有一个Google App Engine应用程序,它有几个模块,有几个版本.我可以将自定义域名映射到应用程序特定模块的特定版本吗?
例如:
http://www.example.com应映射到http://module1-dot-app1.appspot.com
我的Google Cloud Endpoints API的客户端是一个JavaScript(AngularJS)Web应用程序,托管在与Endpoints API本身相同的Google App Engine应用程序上.我的用户使用webapp2会话(数据存储区)进行身份验证.他们不一定拥有Google帐户.我希望能够向Endpoints API发出请求,这样/api/users/me
会返回当前登录用户的用户数据.
首先,我认为我必须为我的App Engine应用程序实现OAuth2提供程序,然后让AngularJS应用程序从我自己的App Engine OAuth提供程序(而不是Google的OAuth提供程序)请求OAuth2访问令牌,就像内置的身份验证机制一样).
但是,此评论建议不要实现我自己的OAuth2提供程序,而是在我的请求中(在消息字段中或在HTTP标头中)向Endpoints API提供任意参数.我猜这个参数应该是一个用户令牌(登录用户特有的一些加密值?).然后应将该值传递给浏览器.那不安全吗?如果可能,我不想在HTTPS上提供我的AngularJS应用程序(以节省成本).
这是OAuth2的一个很好的用例吗?或者OAuth2仅用于授予第三方应用程序访问用户数据的权限?
如果OAuth2不是这样的话:如何将用户令牌安全地传递给浏览器并防止中间人攻击?用户令牌是否应在一定时间后过期?
python google-app-engine oauth-2.0 webapp2 google-cloud-endpoints
我的数据库中的每个用户对象都有一个增量ID(1,2,3,...).查看用户配置文件的URL包含用户对象的ID; 例如http://www.example.com/users/1.这样每个人都可以看到网站上有多少用户,用户群增长的速度等等.我不想提供这些信息.
我想将增量ID转换为Base58格式的固定长度字符串,因此URL看起来像http://www.example.com/users/2WNrx2jq184此外,我需要将字符串转换回的字符串的反向函数原始身份证.反向功能不应该易于逆向工程.
我为此找到的最好的Python代码是https://github.com/JordanReiter/django-id-obfuscator.这是非常好的,但在某些情况下,它会添加一个0
和/或.
字符,这会导致字符串不在Base58中而不是固定长度.(参见utils.py第24和29行)
如何改进django-id-obfuscator以产生固定长度的base58混淆ID,或者如何在Python中创建这样的混淆ID?
我有一个使用PyCrypto用AES加密字符串的函数.当我在单元测试中调用该函数时,一切正常.在生产环境中,它也可以正常工作.但是,在GAE开发服务器上调用该函数时,会引发错误:"ImportError:无法导入名称blockalgo".我在Windows 7(64位)和Mac OS 10.5上测试过它.两者都导致了同样的错误.我正在使用带有Python 2.7的Google App Engine.可能是什么问题呢?
的app.yaml
application: xxx
version: 6
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: django
version: "1.2"
- name: webapp2
version: "2.3"
- name: jinja2
version: "2.6"
- name: pycrypto
version: "2.3"
- name: PIL
version: "1.1.7"
builtins:
- appstats: on
- remote_api: on
inbound_services:
- mail
- warmup
Run Code Online (Sandbox Code Playgroud)
加密功能:
def encrypt(plaintext):
from Crypto.Cipher import AES
import hashlib
password = 'xxx'
key = hashlib.sha256(password).digest()
mode = AES.MODE_ECB
encryptor = AES.new(key, mode)
BLOCK_SIZE = …
Run Code Online (Sandbox Code Playgroud) 是否可以向未使用 Google 帐户登录的用户展示Google Picker ?我想让用户从我网站的 Google 帐户的共享 Google 云端硬盘中选择文件。我可以在服务器上使用 OAuth 访问这些文件。但是否也可以使用 Google Picker 来呈现文件?也许用这个方法:
PickerBuilder.setOAuthToken(string)
Run Code Online (Sandbox Code Playgroud)
设置用于验证当前用户身份的 OAuth 令牌。根据令牌的范围,只有某些视图才会显示数据。有效范围是 Google 文档、云端硬盘和照片。当用户通过 OAuth 进行身份验证时,应使用此方法而不是 .setAuthUser。
我已经尝试过这个,但我认为这是不可能的。或者是吗?
自最新发布的Google App Engine Python SDK以来,可以使用模块.我有一个带有默认模块和另一个模块的Python应用程序.要在开发服务器中启动模块,开发服务器必须像这样运行:
dev_appserver.py app.yaml othermodule.yaml
Run Code Online (Sandbox Code Playgroud)
当我app.yaml othermodule.yaml
在PyCharm的运行/调试配置中添加"附加选项"然后运行开发服务器时,我收到以下错误消息:
google.appengine.tools.devappserver2.errors.InvalidAppConfigError:"." 是一个目录,需要一个yaml配置文件
这是因为PyCharm在命令末尾添加了一个点来运行开发服务器,如下所示:
dev_appserver.py app.yaml othermodule.yaml .
Run Code Online (Sandbox Code Playgroud)
是否可以删除点,或者我必须等到在PyCharm中修复它?在有模块之前,没有必要这样做.
python ×4
javascript ×2
oauth-2.0 ×2
dns ×1
encoding ×1
encryption ×1
google-api ×1
google-oauth ×1
jinja2 ×1
oauth ×1
pycharm ×1
pycrypto ×1
webapp2 ×1