# ブラウザの自動入力

## 概要 <a href="#overview" id="overview"></a>

KeeperPAMでは、リモートブラウザ分離 (RBI) セッションに対して認証情報を自動入力することが可能です。認証情報がユーザーに表示されることはなく、KeeperゲートウェイがChromiumセッション内で入力処理を行い、そのセッションがユーザーのボルトに視覚的に投影されます。

以下はRBIレコードの一例で、Amazon AWSのログインページで認証情報を自動入力します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FfYr2nk6PRklLLMZNSWLY%2Fimage.png?alt=media&#x26;token=9e8bdfac-ccd0-420e-be25-a9812ab8233a" alt=""><figcaption><p>リモートブラウザ分離レコード</p></figcaption></figure>

## 使用できる認証情報 <a href="#eligible-credentials" id="eligible-credentials"></a>

認証情報を自動入力するには、該当レコードをゲートウェイに関連付けられた共有フォルダに追加する必要があります。

この例では、「craigdemouser」というAWSのIDが、Keeperゲートウェイによって管理されている共有フォルダに保存されています。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FLlOxrI3uCxfdFzqaaW9q%2Fimage.png?alt=media&#x26;token=950c3ee2-11b0-474b-86f8-1b1e042ef90c" alt=""><figcaption><p>自動入力に使用するPAMユーザー</p></figcaption></figure>

共有フォルダは、Keeperゲートウェイを保持するアプリケーションと共有されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FeaprZ8L5HWRBrlqotcBX%2Fimage.png?alt=media&#x26;token=ad64101a-d254-4015-8516-84632f1c76be" alt=""><figcaption><p>アプリケーションに関連付けられた共有フォルダ</p></figcaption></figure>

アプリケーションはKeeperゲートウェイに関連付けられています。これにより、ゲートウェイは共有された認証情報にアクセスし、復号化できるようになります。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FnYlShW7SzxFW8WSGst76%2Fimage.png?alt=media&#x26;token=5e177a59-bb93-4d88-875b-6097466e75f0" alt=""><figcaption><p>アプリケーションにリンクされたKeeperゲートウェイ</p></figcaption></figure>

自動入力を設定するには、レコードのPAM構成セクションにある **\[編集]** をクリックして、自動入力の設定を編集します。

リモートブラウザ分離の構成では、どの認証情報を自動入力するかを選択することができます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FM1qvwj2WjX45Kuh5dIcR%2Fimage.png?alt=media&#x26;token=240155cb-fd5a-41a2-af4d-61b518d6ab8d" alt=""><figcaption><p>ブラウザの自動入力設定</p></figcaption></figure>

セッションを開始すると、AWSコンソールのユーザー名とパスワードがリモートブラウザ分離セッション内で自動入力されます。認証情報はユーザーに表示されることなく、フォームフィールドを確認することもできません。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FFOcLCsliZWMihgBzyFj1%2Fimage.png?alt=media&#x26;token=ae7b230f-a5a4-49e6-bdbc-91e43e397ecf" alt=""><figcaption><p>Amazon AWS を使用した自動入力の例</p></figcaption></figure>

## 自動入力の対象 <a href="#autofill-targets" id="autofill-targets"></a>

KCMで使用される自動入力ルールは、JSONまたはYAML形式のオブジェクトの配列であり、各オブジェクトには少なくとも以下のプロパティを指定します。

* `page`\
  自動入力ルールが適用されるページのURLパターン。このパターンは、ナビゲーション/リソースルールで受け入れられるパターンと同じです。

加えて以下から1つ以上のプロパティを指定します。

* `username-field`\
  自動入力されたユーザー名を受け取るべきフィールドに一致するCSSセレクタ。Keeperゲートウェイは、Keeperレコードからユーザー名フィールドの値を挿入します。
* `password-field`\
  自動入力されたパスワードを受け取るべきフィールドに一致するCSSセレクタ。入力される値は接続のパスワードパラメータの値です。
* `totp-code-field`\
  自動入力されたTOTPコードを受け取るべきフィールドに一致するCSSセレクタ。入力される値は接続のTOTPパラメータの値です。
* `submit`\
  すべての適用可能なユーザー名/パスワードフィールドが入力された後にクリックされるべき要素のCSSセレクタ。必要な場合のみ指定します (例: 対象のログインページが適切なHTMLを使用していない場合)。省略すると、KCMはユーザーが「Enter」を押したかのようにログインフォームを送信しようとします。
* `cannot-submit`\
  一致する要素が存在する限り、KCMに自動送信を行わないよう指示するCSSセレクタ。

以下はユーザー名とパスワードのフィールドがある単一ページのウェブアプリケーションの例となります。

```
- page: "http://172.31.8.134:8080/login"
  username-field: "input[name='j_username']"
  password-field: "input[name='j_password']"
```

一部のログインフローでは複数のルールが必要になります。例えば、Microsoft Azure Portalのログインフローがその一例です。

以下は、Microsoft Azure に必要な自動入力ルールのYAMLの例となります。

```
- page: "login.microsoftonline.com"
  username-field: "input[autocomplete='username webauthn']"

- page: "login.live.com"
  password-field: "input[autocomplete='current-password']"
```

以下は同じもののJSON形式です。

```
[
    {
        "page": "login.microsoftonline.com",
        "username-field": "input[autocomplete='username webauthn']"
    },
    {
        "page": "login.live.com",
        "password-field": "input[autocomplete='current-password']"
    }
]
```

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F23on80p8R7qCV0bS8YT3%2Fimage.png?alt=media&#x26;token=b424402a-d013-4e15-93ab-82d7c512160e" alt=""><figcaption><p>JSON Azure自動入力ターゲットの例</p></figcaption></figure>

自動送信を行わない方が良い例としては、ページにキャプチャがある場合が挙げれれます。以下はその例です。

```
- page: "https://dash.cloudflare.com/login"
  username-field: "input[id='email']"
  password-field: "input[id='password']"
  cannot-submit: "div[data-testid=challenge-widget-container]"
```

CSSだけでは不十分な、特に複雑なページの場合、代わりにXPath式を使用することができます。そのようなXPath式は、「/」で始めます。

## フィールド識別 <a href="#field-identification" id="field-identification"></a>

リモートブラウザ分離は、JSONまたはYAMLコードで定義された特定のフィールド要素に基づいて認証情報を自動入力します。フォームフィールドのセレクタは、ページの内容を検査し、特定のフィールド要素を見つけることで識別できます。

1. **ページを検査する**: ウェブページを右クリックして **\[検証]** を選択し、デベロッパーツールを開きます。
2. **フィールドを選択する**: 要素セレクタツールを使って識別したいフォームフィールドをクリックします。
3. **属性を確認する**: 強調表示されたHTMLコードを見て、`autocomplete`、`type`、`name`、`id`などの識別子を確認します。

**例1: `autocomplete`**

* **HTMLコード**:`<input type="password" autocomplete="current-password" ...>`
* **説明**: パスワードフィールドは、`autocomplete`属性が`current-password`に設定されていることで識別できます。

**例2: `type`**

* **HTMLコード**:`<input type="password" ...>`
* **説明**: パスワードフィールドは、`type`属性が`password`に設定されていることで識別できます。

**例3: `name`**

* **HTMLコード**:`<input type="password" name="some_name_xyz" ...>`
* **説明**: パスワードフィールドは、`name`属性が`some_name_xyz`に設定されていることで識別できます。

**例4: `id`**

* **HTMLコード**:`<input type="password" id="some_id_1234" ...>`
* **説明**: パスワードフィールドは、`id`属性が`some_id_1234`に設定されていることで識別できます。

### フィールド識別のテスト

Chromeブラウザからデベロッパーツールを開き、\[コンソール] タブに移動します。\
フォームフィールドの識別をテストするには、JavaScriptの`document.querySelector()`コマンドを使用します。

例として、以下を入力してから「enter」キーを押します。

```
document.querySelector("input[type='password']")
```

フィールドが見つかった場合はDOM要素が表示されます。見つからない場合はエラーが表示されます。
