我有一个Angular 11项目,它实现了WebAuthn注册。后端是SpringBoot 2.4
WebAuthn Login应该在项目的两个部分工作,"main"而"观看者"域设置相当复杂:
主要项目<<p>url/em>- 本地:https://localhost: 4202
- 暂存:https://company.com(本地Kubernetes服务器)
- 刺激:https://company-project.com
- 本地:https://localhost: 4200
- 暂存:https://viewer.develop.plattform.intra.company.com(本地Kubernetes服务器)
- 刺激:https://viewer.company-project.com
代码environment.ts
prodUrls: ['company-project.com'],
webauthn: {
name: "Company DEV",
rpId: "localhost"
}
environment.prod。Ts(在构建中替换)
prodUrls: ['company-project.com'],
webauthn: {
name: "Company Prod",
rpId: "plattform.intra.company.com" // gets overridden by values in "prodUrls"
}
webauthn.service.ts
private _getRelyingPartyInfo(): RelyingParty {
let rpId = environment.webauthn.rpId;
/**
* Check if the Hostname matches one of our Prod Hostnames
* and use this instead
*/
environment.prodUrls.forEach((url, index) => {
if (location.hostname.indexOf(url) > -1) {
rpId = environment.prodUrls[index];
}
});
const rp = {
id: rpId,
name: environment.webauthn.name
};
return rp;
}
的问题- 它在本地工作,使用rpId
localhost
(本地后端和前端) - 它不工作在分期——>后端抛出
WebAuthnException message: rpIdHash doesn't match preconfigured rpId.
- 它应该在使用
company-project.com
作为rpId的Prod上工作(害怕部署,因为它不能在staging上工作)
What I tried
对于staging,我将rpId更改为develop.plattform.intra.company.com
,我可以在"main"中注册和登录。登录"查看器";也抛出错误
规范没有非常具体地说明什么应该工作:https://www.w3.org/TR/webauthn/#relying-party-identifier,它只说什么不应该工作。我想,多个子域会使分级变得复杂吗?
分级的正确rpId是什么?company-project.com
作为rpId应该在产品上工作的假设是否正确?
对于分期,我将rpId更改为develop.plattform.intr.company.com,我可以在"main"注册和登录。登录"查看器";也抛出错误
得到断言的代码是什么?你可能还会遇到另一个问题。需要将get断言RP ID设置为与注册时使用的RP ID相同。如果你不这样做,它将默认为原点,这对于你的子域将是不同的。