1.20.7.3. 授权标头
请求在 authorization
标头中包含 app_id
和 app_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
标头:
-
它接受字符串值并通过空格分割,检查它是否至少生成两个
credential
类型和credential
本身,然后丢弃credential
类型。 然后,它会解码包含所需数据的第二个值,并使用冒号(:)字符进行拆分,使其具有一个包含
app_id
的操作堆栈,然后解码app_key
(若存在)。-
如果授权标头中不存在
app_key
,则将检查其特定源,例如本例中带有键app_key
的标头。
-
如果授权标头中不存在
-
要向
credentials
添加额外条件,允许Basic
授权,其中app_id
是aladdin
或admin
,或者任何app_id
长度至少为 8 个字符。 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
-
选取
authorization
标头值后,您可以通过淘汰堆栈来获取Basic
credential
类型,使类型放置在顶部。 -
在其上运行通配匹配。验证凭据并且凭据被解码和分割后,您将获得堆栈底部的
app_id
,还可能获得顶部的app_key
。 运行
测试:
如果堆栈中有两个值,表示已获取app_key
。-
确保字符串长度介于 1 到 63 之间,包括
app_id
和app_key
。如果密钥的长度为零,则将其丢弃,并像不存在密钥一样继续。如果只有一个app_id
且没有app_key
,则缺少的其他分支表示测试和评估成功。
-
确保字符串长度介于 1 到 63 之间,包括
assert
,最后一个操作表示它使它进入堆栈没有副作用。然后您可以修改堆栈:
颠倒堆栈,使
app_id
位于顶部。-
无论是否存在
app_key
,取代堆栈可确保app_id
处于顶级。
-
无论是否存在
使用
and
在测试期间保留堆栈的内容。然后使用以下可能性之一:
-
确保
app_id
的字符串长度至少为 8。 -
确保
app_id
与aladdin
或admin
匹配。
-
确保