首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >云任务掩蔽Bearer令牌(公共云运行)

云任务掩蔽Bearer令牌(公共云运行)
EN

Stack Overflow用户
提问于 2022-02-23 19:28:25
回答 2查看 457关注 0票数 0

我有一个由JWT令牌认证的公共云运行。100%工作。云中解码令牌的逻辑在python中:

代码语言:javascript
运行
复制
def decode_jwt(token: str) -> dict:
    try:
        decoded_token = jwt.decode(
            token, JWT_SECRET, algorithms=[JWT_ALGORITHM])
        return decoded_token if decoded_token["expires"] >= time.time() else None
    except Exception as e:
        raise InvalidTokenError

云运行可以使用自定义域公开使用。

现在,我想使用云任务对云运行执行一些请求(每个请求都有不同的参数,以前由一个云函数创建)。在云任务中,我使用"Bearer {token}“参数创建每个任务

云任务标题代码:

代码语言:javascript
运行
复制
task["http_request"]["headers"] = \
                {"Authorization": f"Bearer {token}",
                 "Accept": "application/json"}

第一种情况:

当我在创建oidc_token时不使用“http_request”参数创建任务时。云运行返回"403禁忌“,并且永远不会到达云运行中的decode_jwt函数。云任务http_request代码:

代码语言:javascript
运行
复制
task = {
        "http_request": {  
            "http_method": tasks_v2.HttpMethod.POST,
            "url": url,  
          }
       }

第二种情况:我添加了一个"oidc_token“。

代码语言:javascript
运行
复制
task = {
        "http_request": {  
            "http_method": tasks_v2.HttpMethod.POST,
            "url": url,  
            "oidc_token": {
                "service_account_email": "service-task@xxxxx.iam.gserviceaccount.com",
           }
       }

现在,请求到达Cloud decode_jwt函数,Cloud中的日志返回"InvalidTokenError“。额外:我添加了一个logging.info来公开在云运行中接收到的令牌,而不是我在Cloud创建中传递的令牌。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-24 01:11:29

问题摘要:

  1. 您有一个公共(allUsers)云运行服务。
  2. 您已经创建了自己的授权机制(HS256 - HMAC和SHA-256)。
  3. 您希望为值分配一个自定义令牌。
  4. 云运行授权由IAP.

管理。

云运行服务的授权由身份感知代理(IAP)管理。如果添加HTTP授权承载令牌,IAP将验证该令牌。该步骤对于您的自定义令牌失败,这将导致HTTP 403禁止错误。

云任务支持两种类型的HTTP授权承载令牌。OAuth访问令牌和OIDC标识令牌。不能使用自己的令牌值替换受支持的类型。

这给你留下了两个选择:

  1. 增强了您的代码以支持Google标识令牌。
  2. 使用自定义HTTP报头,它支持您的自定义令牌格式。

注意:我不建议使用HS256。HS256是一种对称算法,它意味着为了验证有效载荷,双方都必须知道秘密。RS256是一种使用私钥对和公钥对的非对称算法。要验证,只需要公钥。这是Google将私钥用于服务帐户和身份的强大设计特性之一。如果你切换到谷歌的方法,所有的辛苦工作都是为你做的。

票数 1
EN

Stack Overflow用户

发布于 2022-02-23 19:42:26

您必须指定云运行服务的受众,就像这样

代码语言:javascript
运行
复制
task = {
        "http_request": {  # Specify the type of request.
            "http_method": tasks_v2.HttpMethod.POST,
            "url": url,  # The full url path that the task will be sent to.
            "oidc_token": {
                "service_account_email": "service-task@xxxxx.iam.gserviceaccount.com",
                "audience": base url of Cloud Run, no /sub/path
            }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71242988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档