FIDO2/WebAuthn FAQ・トラブルシューティング
概要
FIDO2/WebAuthn実装時によく遭遇する問題とその解決方法をFAQ形式でまとめています。
FAQ
Q1: Touch IDが認証時に表示されない(QRコードのみ表示される)
症状:
- Passkey登録は成功した
- 認証時にTouch IDオプションが表示されない
- 「Use your phone or tablet」とQRコードのみ表示される
原因と解決方法:
原因1: rpIdの不一致
問題: 登録時と認証時でrpIdが異なる
登録時: rpId = "local.test"
認証時: rpId = "auth.local.test" (オリジンからのデフォルト値)
解決方法: 認証チャレンジのレスポンスにrpIdを明示的に含める
// サーバーレスポンス
{
"challenge": "...",
"rpId": "local.test", // または rp.id でネスト
"allowCredentials": [...]
}
// フロントエンド
const publicKeyOptions = {
challenge: base64UrlToBuffer(challenge),
rpId: response.rpId || response.rp?.id, // 両方の形式に対応
allowCredentials: [...]
};
ポイント:
rpIdを省略すると、ブラウザは現在のオリジンのドメインを使用- サブドメインデプロイ(
auth.local.test)では親ドメイン(local.test)を明示的に指定する必要がある - 登録時と認証時で同じ
rpIdを使用すること
原因2: transportsが含まれていない
問題: allowCredentialsにtransportsが含まれていない
// NG: transportsなし
{
"allowCredentials": [
{
"type": "public-key",
"id": "credential_id_base64url"
}
]
}
// OK: transportsあり
{
"allowCredentials": [
{
"type": "public-key",
"id": "credential_id_base64url",
"transports": ["internal", "hybrid"]
}
]
}