У меня есть проект Angular 11, который реализует регистрацию в WebAuthn. Бэкэнд - SpringBoot 2.4.
WebAuthn Login должен работать в двух частях проекта, основной и просмотрщик. Настройка домена довольно сложна:
Главный проект
URL-адреса
- Локальный: https: // localhost: 4202
- Стадия: https://company.com (локальный сервер Kubernetes)
- Продукт: https://company-project.com
Просмотр проекта
URL-адреса
- Локальный: 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
(локально как Backend, так и Frontend) - НЕ работает на постановке - ›Backend throws
Сообщение WebAuthnException: rpIdHash не соответствует хешу предварительно настроенного rpId.
- Он должен работать на Prod, используя
company-project.com
в качестве rpId (боюсь развернуть, так как он не работает на стадии)
Что я пробовал
Для постановки я изменил rpId на develop.plattform.intra.company.com
, и я могу зарегистрироваться и войти в систему в main. Вход в программу просмотра также вызывает ошибку.
В спецификации не очень конкретно указано, что должно работать: https://www.w3.org/TR/webauthn/#relying-party-identifier, он говорит только о том, что не должно работать. Я предполагаю, что несколько поддоменов усложняют постановку?
Каким будет правильный rpId для постановки и правильно ли предположение, что company-project.com
as rpId должен работать на продукте?