我们已经直接使用U2F在我们的auth web应用程序与主机名作为我们的应用程序ID (https://auth.company.com),这工作得很好。但是,我们希望能够通过HTTP API与auth服务器通信的其他应用程序(和主机名,例如https://customer.app.com)与auth服务器进行身份验证。
我可以通过API调用生成签名请求和什么,并将它们返回给客户端应用程序,但它失败了服务器端(认证服务器),因为应用程序ID不验证(客户端使用自己的主机名作为应用程序ID)。这是可以理解的,但是我应该如何处理呢?我读过关于facet的书,但我根本无法让它工作。
客户端应用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(超时错误)一段时间后。我没有看到任何请求/facet。有办法解决这个问题吗?还是我找错了地方(或不同的森林)?
,
好了,在研究了几个小时之后;我很确定这个可怕的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)。
我仍然不确定我是否在正确的轨道上,尽管我如何设计这个
对于我的特殊情况,我不需要担心facet。最后,我只是通过安全API接口将客户端应用程序主机名传递给认证服务器,它使用该主机名作为应用程序ID。到目前为止,似乎工作正常。
我遇到的问题是由于在开发中使用http和Firefox U2F插件不允许使用JSON facet。