ホスト名をアプリ ID ( https://auth.company.com )として認証 Web アプリで U2F を直接使用しており、正常に動作しています。ただし、 HTTP API 経由で認証サーバーと通信する他のアプリ (およびhttps://customer.app.comなどのホスト名) から認証サーバーで認証できるようにしたいと考えています。
API 呼び出しを介して署名要求などを生成し、それらをクライアント アプリに返すことはできますが、アプリ ID が検証されない (クライアントが独自のホスト名をアプリ ID として使用している) ため、サーバー側 (認証サーバー) で失敗します。 . これは理解できますが、これをどのように処理すればよいでしょうか。ファセットについて読みましたが、まったく機能しません。
クライアント アプリの JS は次のようになります。
var registerRequests = // ...
var signRequests = // ...
u2f.register('http://localhost:3000/facets', registerRequests, signRequests, function(registerResponse) {
if (registerResponse.errorCode) {
return alert("Registration error: " + registerResponse.errorCode);
}
// etc.
});
これにより、しばらくするとエラー コード 5 (タイムアウト エラー) が表示されます。/facets へのリクエストが表示されません。これを回避する方法はありますか、それとも間違ったツリー (または別のフォレスト) に吠えていますか?
————</p>
さて、これを数時間調査した後。Firefox U2F プラグインのこの厄介な部分が、私の悩みの原因であると確信しています。
if (u.scheme == "http")
if (url2str(u, true) == url2str(ou, true))
return resolve(challenge);
else
return reject("Not matching appID");
https://github.com/prefiks/u2f4moz/blob/master/ext/appIdValidator.js#L106-L110
基本的に、appID のスキームが http の場合、それがページのホストとまったく同じである場合にのみ許可するということです (信頼されたファセット JSON を取得するための動作を実行しますが、https に対してのみ)。
これをどのように設計しようとしているのかはまだわかりません。