1.20.7.3. 授权标头


请求在 authorization 标头中包含 app_idapp_key。如果末尾至少输出了一个或两个值,您可以分配 app_key

如果末尾输出了一两个或两个,此处的解决方法将分配 app_key

authorization 标头使用授权类型指定值,其值编码为 Base64。这意味着,您可以通过空格字符来划分值,取第二个输出,然后使用冒号(:)作为分隔符再次分割它。例如,如果您使用这种格式 app_id:app_key,则标头类似以下示例 credential

aladdin:opensesame:  Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

您必须使用小写标头字段名称,如下例所示:

credentials:
  app_id:
    - header:
        keys:
          - authorization
        ops:
          - split:
              separator: " "
              max: 2
          - length:
              min: 2
          - drop:
              head: 1
          - base64_urlsafe
          - split:
              max: 2
  app_key:
    - header:
        keys:
          - app_key

以上用例示例查看 authorization 标头:

  1. 它接受字符串值并通过空格分割,检查它是否至少生成两个 credential 类型和 credential 本身,然后丢弃 credential 类型。
  2. 然后,它会解码包含所需数据的第二个值,并使用冒号(:)字符进行拆分,使其具有一个包含 app_id 的操作堆栈,然后解码 app_key (若存在)。

    1. 如果授权标头中不存在 app_key,则将检查其特定源,例如本例中带有键 app_key 的标头。
  3. 要向 credentials 添加额外条件,允许 Basic 授权,其中 app_idaladdinadmin,或者任何 app_id 长度至少为 8 个字符。
  4. app_key 必须包含一个值,并且至少具有 64 个字符,如下例所示:

    credentials:
      app_id:
        - header:
            keys:
              - authorization
            ops:
              - split:
                  separator: " "
                  max: 2
              - length:
                  min: 2
              - reverse
              - glob:
                - Basic
              - drop:
                  tail: 1
              - base64_urlsafe
              - split:
                  max: 2
              - test:
                  if:
                    length:
                      min: 2
                  then:
                    - strlen:
                        max: 63
                    - or:
                        - strlen:
                            min: 1
                        - drop:
                            tail: 1
              - assert:
                - and:
                  - reverse
                  - or:
                    - strlen:
                        min: 8
                    - glob:
                      - aladdin
                      - admin
  5. 选取 authorization 标头值后,您可以通过淘汰堆栈来获取 Basic credential 类型,使类型放置在顶部。
  6. 在其上运行通配匹配。验证凭据并且凭据被解码和分割后,您将获得堆栈底部的 app_id,还可能获得顶部的 app_key
  7. 运行 测试: 如果堆栈中有两个值,表示已获取 app_key

    1. 确保字符串长度介于 1 到 63 之间,包括 app_idapp_key。如果密钥的长度为零,则将其丢弃,并像不存在密钥一样继续。如果只有一个 app_id 且没有 app_key,则缺少的其他分支表示测试和评估成功。

assert,最后一个操作表示它使它进入堆栈没有副作用。然后您可以修改堆栈:

  1. 颠倒堆栈,使 app_id 位于顶部。

    1. 无论是否存在 app_key,取代堆栈可确保 app_id 处于顶级。
  2. 使用 and 在测试期间保留堆栈的内容。

    然后使用以下可能性之一:

    • 确保 app_id 的字符串长度至少为 8。
    • 确保 app_idaladdinadmin 匹配。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.