11.9. 認証情報ユースケースの 3scale WebAssembly モジュールの例
ほとんどの時間を費やして、設定手順を適用してサービスへのリクエストの認証情報を取得します。
以下は credentials の例です。これは、特定のユースケースに合わせて変更できます。
複数のソースオブジェクトと独自の lookup queries を指定する場合、これらはすべて組み合わせることができますが、いずれか 1 つが正しく解決されるまで、それらは順番に評価されます。
11.9.1. クエリー文字列パラメーターの API キー (user_key) リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、クエリー文字列パラメーターまたは同じ名前のヘッダーで user_key を検索します。
11.9.2. アプリケーション ID およびキー リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、クエリーまたはヘッダーの app_key および app_id 認証情報を検索します。
11.9.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
aladdin:opensesame: Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
次の例に示すように、ヘッダーフィールド名は小文字を使用する必要があります。
前述のユースケースの例は、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 文字を指定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
authorizationヘッダーの値を選択したら、タイプが上部に配置されるようにスタックを逆にしてBasiccredential-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と一致していることを確認します。
-
11.9.4. OpenID Connect (OIDC) のユースケース リンクのコピーリンクがクリップボードにコピーされました!
Service Mesh および 3scale Istio アダプターの場合は、以下の例のように RequestAuthentication をデプロイし、独自のワークロードデータおよび jwtRules を入力する必要があります。
RequestAuthentication を適用するとき、JWT トークンを検証するためにネイティブプラグインで Envoy を設定します。プロキシーは、モジュールを実行する前にすべてを検証します。したがって、失敗したリクエストが 3scale WebAssembly モジュールに実行されません。
JWT トークンが検証されると、プロキシーはそのコンテンツを内部メタデータオブジェクトに格納します。エントリーのキーは、プラグインの特定の設定に依存します。このユースケースでは、不明なキー名が含まれる単一のエントリーを持つ構造化オブジェクトを検索できます。
OIDC の 3scale app_id は、OAuth client_id と一致します。これは JWT トークンの azp フィールドまたは aud フィールドにあります。
Envoy のネイティブ JWT 認証フィルターから app_id フィールドを取得するには、以下の例を参照してください。
この例では、モジュールに対し、filter ソースタイプを使用して Envoy 固有の JWT 認証ネイティブプラグインからオブジェクトのフィルターメタデータを検索するよう指示します。このプラグインには、1 つのエントリーと事前に設定された名前を持つ構造化オブジェクトの一部として JWT トークンが含まれます。0 を使用して、単一のエントリーのみにアクセスするように指定します。
結果の値は、以下の 2 つのフィールドを解決する構造です。
-
azp:app_idが見つけられる値。 -
aud: この情報も見つけられる値。
この操作により、割り当て用に 1 つの値のみが保持されます。
11.9.5. ヘッダーからの JWT トークンの取得 リンクのコピーリンクがクリップボードにコピーされました!
一部のセットアップには、JWT トークンの検証プロセスがあり、検証されたトークンが JSON 形式のヘッダーを介してこのモジュールに到達する場合があります。
app_id を取得するには、以下の例を参照してください。