ユーザー名なしの認証チュートリアル
Resident Keyとは?
パスワードレス認証チュートリアルでは、認証プロセスが行うにはユーザー名が必要です。 しかし、実際には、クレデンシャルの登録の時、RequireResidentKeyパラメータを使用して、ユーザー名を削除することができます。
Resident Key (rk)は、クレデンシャルIDを事前にしらなくても、取得できる特定なクレデンシャルタイプです。
パスワードレス認証チュートリアルの流れを見ると、新しいクレデンシャルを作成する時、サーバーによって生成されたuserIdを渡す必要があります。 rk == trueの場合、このuserIdは認証器に保存され、認証のためのレスポンスでuserHandleとして返されます。
注意
執筆時点(2019年8月)では、Resident Keyは全てのブラウザ、OS、及び認証器でサポートされているわけではありません。
1. 登録
登録時には、RequireResidentKeyパラメータのみ変更があります。
-
1
ユーザー情報入力
2. 認証
このシナリオでは、認証時にユーザー情報は必要がありません。
-
1
パラメータ説明
以下はクレデンシャルの登録の時に使用するパラメータです。
<script>
// 可能の値:none (デフォルト), direct, indirect
let attestation = "none"; // Replying Party (RP)は、認証器の証明が必要がないこと
let authenticatorSelection = {
// 可能の値:<empty> (デフォルト), platform, cross-platform
'authenticatorAttachment': "", // RPは認証器のタイプを指定しないこと。ユーザーは使用したい認証器を選択できます。
// 可能の値:preferred, required, discouraged (デフォルト)
'userVerification': "discouraged", // RPは、操作中にユーザー確認(user verification)を行わないこと
// 可能の値:true, false (デフォルト)
'requireResidentKey': true // 公開鍵クレデンシャルを生成した時、認証器はクライアント側に常駐する公開鍵クレデンシャルソースを生成すること
};
</script>
RPは、クレデンシャルの生成中に認証器の検証に関する優先度を指定できます。Attestationパラメータは、以下の3つの値があります。
- none: RPは認証器の証明が必要がないこと。
- indirect: RPは認証器の検証を優先しますが、クライアントは、検証で使うステートメントを取得する方法を決定できます。
- direct: RPは、認証器が生成した検証ステートメントを受信したいこと。
このデモでは、デファクト値が使用されています。RPサーバーは高いセキュリティーが必要な場合は、
"direct"を使用して、クライアントに完全なステートメントを強制的に返させる必要があります。
他のUserVerification値は
多要素認証シナリオで説明します。
また、RequireResidentKeyの使い方は
Resident Keyとは?で説明しました。
ユーザー名なしの認証を使用するには、trueである必要があります。
以下はクレデンシャルの認証の時に使用するパラメータです。
<script>
// 可能の値:preferred, required, discouraged (デフォルト)
'userVerification': "discouraged", // RPは、操作中にユーザー確認(user verification)を行わないこと
</script>
RPはこれらのパラメータを指定しない場合、FIDO2認証サーバーはデファクト値と設定します。