 
  概要
ラストマイル セキュリティのために、簡易な Basic 認証を使用できます。このポリシーは、ユーザー名とパスワードを取得し、Base64 でエンコードして、生成された値を変数に書き込みます。生成された値の形式は Basic
  Base64EncodedString です。この値は一般に、HTTP ヘッダー(Authorization ヘッダーなど)に書き込まれます。
このポリシーでは、Base64 でエンコードされた文字列で保管された認証情報を、ユーザー名とパスワードにデコードすることもできます。
動画: この動画では、基本認証ポリシーを使用して、ユーザー名とパスワードを Base64 でエンコードする方法を実演しています。
動画: この動画では、基本認証ポリシーを使用して、Base64 でエンコードされたユーザー名とパスワードをデコードする方法を実演しています。
サンプル
送信時のエンコード
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
上記のサンプル ポリシー構成では、エンコードされるユーザー名とパスワードは、<User> 要素と <Password> 要素の ref 属性で指定された変数から取得されます。これらの変数はポリシーの実行前に設定されている必要があります。一般に、変数には Key-Value マップから読み取られた値が代入されます。Key Value Map Operations ポリシーをご覧ください。
この構成では、Authorization という名前の HTTP ヘッダーが <AssignTo> 要素で指定され、バックエンド サーバーに送信される送信リクエスト メッセージに追加されます。
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
<User> と <Password> の値は、コロンで連結されてから Base64 でエンコードされます。
次のエントリを持つ Key-Value マップがあるとします。
{
  "encrypted" : true,
  "entry" : [ {
    "name" : "username",
    "value" : "MyUsername
  }, {
    "name" : "password",
    "value" : "MyPassword
  } ],
  "name" : "BasicAuthCredentials"
}
      BasicAuthentication ポリシーの前に次の KeyValueMapOperations ポリシーを配置して、Key-Value ストアから <User>  要素と <Password> 要素の値を抽出し、変数 credentials.username と credentials.password に入力します。
<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials"> <Scope>apiproxy</Scope> <Get assignTo="credentials.username" index='1'> <Key> <Parameter>username</Parameter> </Key> </Get> <Get assignTo="credentials.password" index='1'> <Key> <Parameter>password</Parameter> </Key> </Get> </KeyValueMapOperations>
受信時のデコード
<BasicAuthentication name="DecodeBaseAuthHeaders"> <DisplayName>Decode Basic Authentication Header</DisplayName> <Operation>Decode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.header.username" /> <Password ref="request.header.password" /> <Source>request.header.Authorization</Source> </BasicAuthentication>
このポリシー サンプルでは、Authorization HTTP ヘッダーのユーザー名とパスワードが <Source> 要素で指定されたとおりにデコードされます。Base64 でエンコードされた文字列は、Basic Base64EncodedString. という形式である必要があります。
このポリシーでは、デコードされたユーザー名は request.header.username 変数、デコードされたパスワードは request.header.password 変数にそれぞれ書き込まれます。
Basic Authentication ポリシーについて
このポリシーには次の 2 つの操作モードがあります。
- エンコード: 変数に格納されているユーザー名とパスワードを Base64 でエンコードします。
- デコード: Base64 でエンコードされた文字列からユーザー名とパスワードをデコードします。
一般に、ユーザー名とパスワードは Key-Value ストアに格納され、ランタイムにその Key-Value ストアから読み取られます。Key-Value ストアの使用について詳しくは、Key Value Map Operations ポリシーをご覧ください。
要素リファレンス
この要素リファレンスは、BasicAuthentication ポリシーの要素と属性について説明します。
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.queryparam.username" /> <Password ref="request.queryparam.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
<BasicAuthentication> 属性
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
次の表に、すべてのポリシーの親要素に共通する属性を示します。
| 属性 | 説明 | デフォルト | 要否 | 
|---|---|---|---|
| name | ポリシーの内部名。 管理 UI プロキシ エディタで  | なし | 必須 | 
| continueOnError | ポリシーが失敗した場合にエラーを返すには、 ポリシーが失敗した後もフローの実行を続行する場合は、 | false | 省略可 | 
| enabled | ポリシーを適用するには、 ポリシーを無効にするには、 | true | 省略可 | 
| async | この属性は非推奨となりました。 | false | 非推奨 | 
<DisplayName> 要素
管理 UI プロキシ エディタで name 属性と一緒に使用して、ポリシーのラベルに使用する自然言語名を指定します。
<DisplayName>Policy Display Name</DisplayName>
| デフォルト | なし この要素を省略した場合、ポリシーの  | 
|---|---|
| 要否 | 省略可 | 
| タイプ | 文字列 | 
<Operation> 要素
認証情報を Base64 エンコードまたは Base64 デコードするかどうかを指定します。
<Operation>Encode</Operation>
| デフォルト: | なし | 
| 要否: | 必須 | 
| 型: | 文字列 有効な値は次のとおりです。 
 | 
<IgnoreUnresolvedVariables> 要素
true に設定すると、変数を解決できない場合でもポリシーはエラーを返しません。BasicAuthentication ポリシーのコンテキストで使用される場合、この値は通常、指定された変数にユーザー名またはパスワードが格納されていない場合にエラーを返すために、false に設定されます。
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
| デフォルト: | true | 
| 要否: | 省略可 | 
| 型: | ブール値 | 
<User> 要素
- エンコードの場合は、<User>要素を使用してユーザー名を含む変数を指定します。ユーザー名とパスワードの値は、コロンで連結されてから、Base64 でエンコードされます。
- デコードの場合は、デコードされたユーザー名が書き込まれる変数を指定します。
<User ref="request.queryparam.username" />
| デフォルト: | なし | 
| 要否: | 必須 | 
| 型: | なし | 
属性
| 属性 | 説明 | デフォルト | 要否 | 
|---|---|---|---|
| ref | ポリシーが動的にユーザー名を読み取る(エンコードの場合)またはユーザー名を書き込む(デコードの場合)変数。 | なし | 必須 | 
<Password> 要素
- エンコードの場合は、<Password>要素を使用してパスワードを含む変数を指定します。
- デコードの場合は、デコードされたパスワードが書き込まれる変数を指定します。
<Password ref="request.queryparam.password" />
| デフォルト: | なし | 
| 要否: | 必須 | 
| 型: | なし | 
属性
| 属性 | 説明 | デフォルト | 要否 | 
|---|---|---|---|
| ref | ポリシーが動的にパスワードを読み取る(エンコードの場合)またはパスワードを書き込む(デコードの場合)変数。 | なし | 必須 | 
<AssignTo> 要素
このポリシーで生成されたエンコード値またはデコード値を設定する際のターゲットの変数を指定します。
次の例は、ポリシーによってメッセージの Authorization ヘッダーが生成された値に設定されることを示しています。
<AssignTo createNew="false">request.header.Authorization</AssignTo>
| デフォルト: | なし | 
| 要否: | 必須 | 
| 型: | 文字列 | 
属性
| 属性 | 説明 | デフォルト | 要否 | 
|---|---|---|---|
| createNew | 変数がすでに設定されている場合に、その変数を上書きするかどうかを指定します。 「false」の場合、変数への割り当ては、変数が現在設定されていない(値が NULL)場合にのみ行われます。 「true」の場合は常に変数の割り当てが行われます。 通常、この値は「false」(デフォルト)に設定します。 | false | 省略可 | 
<Source> 要素
デコードの場合は、Base64 でエンコードされた文字列を含む変数(Basic Base64EncodedString)。たとえば、Authorization ヘッダーに対応して request.header.Authorization を指定します。
<Source>request.header.Authorization</Source>
| デフォルト: | なし | 
| 要否: | デコード操作の場合は必須。 | 
| 型: | なし | 
フロー変数
ポリシーが失敗した場合は、次のフロー変数が設定されます。
- BasicAuthentication.{policy_name}.failed(値は true)
エラー リファレンス
このセクションでは、このポリシーによってエラーがトリガーされたときに返される障害コードとエラー メッセージ、Edge によって設定される障害変数について説明します。これは、エラーに対処する障害ルールを作成するうえで重要な情報です。詳細については、ポリシーエラーについて知っておくべきことと障害の処理をご覧ください。
ランタイム エラー
このエラーは、ポリシーの実行時に発生することがあります。
| 障害コード | HTTP ステータス | 原因 | 修正 | 
|---|---|---|---|
| steps.basicauthentication.InvalidBasicAuthenticationSource | 500 | デコードで、Base64 エンコードされた文字列に有効な値が含まれていない場合、またはヘッダーの形式が正しくない場合(たとえば、「Basic」で始まっていない場合)。 | build | 
| steps.basicauthentication.UnresolvedVariable | 500 | デコードまたはエンコードに必要なソース変数が存在しません。このエラーは、 IgnoreUnresolvedVariablesが false の場合にのみ発生する可能性があります。 | build | 
デプロイエラー
以下のエラーは、このポリシーを含むプロキシをデプロイするときに発生することがあります。
| エラー名 | 発生条件 | 修正 | 
|---|---|---|
| UserNameRequired | 名前付きオペレーションに <User>要素が存在する必要があります。 | build | 
| PasswordRequired | 名前付きオペレーションに <Password>要素が存在する必要があります。 | build | 
| AssignToRequired | 名前付きオペレーションに <AssignTo>要素が存在する必要があります。 | build | 
| SourceRequired | 名前付きオペレーションに <Source>要素が存在する必要があります。 | build | 
障害変数
ランタイム エラーが発生すると、次の変数が設定されます。詳細については、ポリシーエラーについて知っておくべきことをご覧ください。
| 変数 | 説明 | 例 | 
|---|---|---|
| fault.name="fault_name" | fault_name は、上記のランタイム エラーの表に記載されている障害の名前です。障害名は、障害コードの最後の部分です。 | fault.name Matches "UnresolvedVariable" | 
| BasicAuthentication.policy_name.failed | policy_name は、障害が発生したポリシーのユーザー指定の名前です。 | BasicAuthentication.BA-Authenticate.failed = true | 
エラー レスポンスの例
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
障害ルールの例
<FaultRule name="Basic Authentication Faults">
    <Step>
        <Name>AM-UnresolvedVariable</Name>
        <Condition>(fault.name Matches "UnresolvedVariable") </Condition>
    </Step>
    <Step>
        <Name>AM-AuthFailedResponse</Name>
        <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
    </Step>
    <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>