1.20.7.3. 認証ヘッダー
リクエストには、authorization
ヘッダーに app_id
および app_key
が含まれます。最後に出力される値が 1 つまたは 2 つある場合は、app_key
を割り当てることができます。
ここでの解決は、最後に出力された 1 つまたは 2 つの出力がある場合は app_key
を割り当てます。
authorization
ヘッダーは承認の種類で値を指定し、その値は Base64
としてエンコードされます。つまり、値を空白文字で分割し、2 番目の出力を取得して、コロン (:) をセパレーターとして使用して再度分割できます。たとえば、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
-type およびcredential
自体の少なくとも 2 つの値を生成することを確認してから、credential
-type をドロップします。 次に、必要なデータが含まれる 2 番目の値をデコードし、最初の
app_id
の後にもしあればapp_key
が含まれる操作スタックとなるように、コロン (:) 文字を使用して分割します。-
app_key
が認証ヘッダーに存在しない場合は、特定のソースがチェックされます (この場合は、キーapp_key
のヘッダーなど)。
-
-
credentials
に追加の条件を追加するには、Basic
認証を許可します。ここで、app_id
はaladdin
もしくはadmin
、または 長さが 8 文字以上の任意のapp_id
になります。 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
-type を取得します。 -
glob マッチを実行します。検証し、認証情報がデコードされ、分割されると、スタックの下部に
app_id
を取得し、上部にapp_key
を取得する可能性があります。 test:
を実行します。スタックに 2 つの値がある場合は、app_key
が取得されたことになります。-
app_id
およびapp_key
を含め、文字列の長さが 1 から 63 文字になるようにします。キーの長さがゼロの場合は破棄し、キーが存在しないものとして続行します。app_id
のみがあり、app_key
がない場合は、不明なブランチは、テストに成功し、評価が続行されます。
-
最後の操作は assert
で、スタックに副作用がないことを示します。その後、スタックを変更することができます。
app_id
が最上部になるように、スタックを逆にします。-
app_key
が存在するかどうかで、スタックを逆にすると、app_id
が上部になります。
-
and
を使用して、テスト間でスタックの内容を保持します。次に、以下のいずれかの方法を使用します。
-
app_id
に 8 文字以上の文字列が設定されていることを確認してください。 -
app_id
がaladdin
またはadmin
と一致していることを確認します。
-