【问题标题】:How to check HTTP basic auth on the python environment of Google Cloud Functions如何在 Google Cloud Functions 的 python 环境中检查 HTTP 基本身份验证
【发布时间】:2019-04-19 10:50:51
【问题描述】:

如何实现?

我不确定是否可以使用各种 Flask 相关库,因为它们使用 python 装饰器 - 而且我无权访问 Flask 路由。

我的解决方案是手动获取标头,并手动解析授权字符串。但我实际上不确定Authorization 遵循什么格式 - 是否有一些库可以为我处理这种复杂情况?

【问题讨论】:

    标签: flask google-cloud-platform google-cloud-build


    【解决方案1】:

    云函数 (CF) 主要用于执行简单的独立任务,而不是复杂的应用程序。

    推荐的CF访问控制方法基于service accountsIAM。来自Runtime service account

    在运行时,Cloud Functions 使用服务帐号 PROJECT_ID@appspot.gserviceaccount.com,具有编辑器 在项目中的作用。您可以更改此服务帐号的角色 限制或扩展您正在运行的函数的权限。

    此访问控制方法在实际 CF 执行之外强制执行,因此您无需担心 CF 代码中的身份验证 - 您已经知道它只能使用相应的服务帐户凭据执行。

    是的,可能可以使用类似于在更复杂的应用程序中使用的自定义身份验证方案,但这不是微不足道的 - 这不是 CF 的设计目的.请参阅某种相关的When to choose App Engine over Cloud Functions?

    【讨论】:

    • 网址是公开的 - 不确定服务帐户如何以这种方式提供任何身份验证。
    • 啊,你的意思是在入口端。我想 IAM 检查 cloudfunctions.functions.call 权限是在 CF 触发级别完成的。因此,如果触发器是 HTTP,是的,该 URL 是公共的,但它位于 Google 拥有的 cloudfunctions.net 域中,因此在接收到 HTTP 请求后但在实际调用 CF 之前进行 IAM 检查很容易。因此,您实际上不需要在 CF 代码本身内部做任何事情,您只需要注意配置 CF 和 IAM 角色和权限。
    • 我还是不明白为什么这和HTTP的“基本访问认证”有关系?
    • 我想我想说的是,我认为尝试解析/使用 CF 代码中的基本身份验证信息毫无意义。由于特定的 CF 始终在 Google 策划的环境中由相同的身份/用户执行,因此信息要么丢失要么是静态的。
    • 它在 HTTP 请求中作为 HTTP 标头发送 - 因此我可以检查它是否与用户名和密码匹配。
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2018-07-09
      • 2018-07-23
      • 2020-03-20
      • 2020-10-25
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      相关资源
      最近更新 更多