【发布时间】:2019-04-19 10:50:51
【问题描述】:
如何实现?
我不确定是否可以使用各种 Flask 相关库,因为它们使用 python 装饰器 - 而且我无权访问 Flask 路由。
我的解决方案是手动获取标头,并手动解析授权字符串。但我实际上不确定Authorization 遵循什么格式 - 是否有一些库可以为我处理这种复杂情况?
【问题讨论】:
标签: flask google-cloud-platform google-cloud-build
如何实现?
我不确定是否可以使用各种 Flask 相关库,因为它们使用 python 装饰器 - 而且我无权访问 Flask 路由。
我的解决方案是手动获取标头,并手动解析授权字符串。但我实际上不确定Authorization 遵循什么格式 - 是否有一些库可以为我处理这种复杂情况?
【问题讨论】:
标签: flask google-cloud-platform google-cloud-build
云函数 (CF) 主要用于执行简单的独立任务,而不是复杂的应用程序。
推荐的CF访问控制方法基于service accounts和IAM。来自Runtime service account:
在运行时,Cloud Functions 使用服务帐号
PROJECT_ID@appspot.gserviceaccount.com,具有编辑器 在项目中的作用。您可以更改此服务帐号的角色 限制或扩展您正在运行的函数的权限。
此访问控制方法在实际 CF 执行之外强制执行,因此您无需担心 CF 代码中的身份验证 - 您已经知道它只能使用相应的服务帐户凭据执行。
是的,可能可以使用类似于在更复杂的应用程序中使用的自定义身份验证方案,但这不是微不足道的 - 这不是 CF 的设计目的.请参阅某种相关的When to choose App Engine over Cloud Functions?
【讨论】:
cloudfunctions.functions.call 权限是在 CF 触发级别完成的。因此,如果触发器是 HTTP,是的,该 URL 是公共的,但它位于 Google 拥有的 cloudfunctions.net 域中,因此在接收到 HTTP 请求后但在实际调用 CF 之前进行 IAM 检查很容易。因此,您实际上不需要在 CF 代码本身内部做任何事情,您只需要注意配置 CF 和 IAM 角色和权限。
requirements.txt:
basicauth==0.4.1
还有代码:
from basicauth import decode
encoded_str = request.headers.get('Authorization')
username, password = decode(encoded_str)
if (username == "example", password == "*********"):
authed_request = True
【讨论】: