微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

各种设置的 WebAuthn 中继方 ID 主要项目查看器项目代码问题我尝试了什么

如何解决各种设置的 WebAuthn 中继方 ID 主要项目查看器项目代码问题我尝试了什么

我有一个 Angular 11 项目,它实现了 WebAuthn 注册。后端是SpringBoot 2.4

WebAuthn 登录应该在项目的两部分工作,“主”和“查看器” 域设置相当复杂:

主要项目

网址

查看器项目

网址

代码

environment.ts

public static async Task<string> UnloadAsync(Assembly assy,bool silentFail = false)
{
  if (AssyLoadContext.__alcd.ContainsKey(assy))
  {
    var tcs = new taskcompletionsource<string>();
    var assemblyName = __namd.Where(kvp => kvp.Value == assy).First().Key;
    __alcd[assy].Unloading += alc => tcs.SetResult(assemblyName);
    __namd.Remove(assemblyName);
    __alcd[assy].Unload();
    __alcd.Remove(assy);
    Debug.WriteLine($"Unloaded assembly '{assy.GetName().Name}'");
    return await tcs.Task;
  }
  if (silentFail)
  {
    return null;
  }

  throw new InvalidOperationException($"Assembly '{assy.GetName().Name}' cannot be unloaded. Did you load it using AssyLoadContext.LoadWithPrivateContext(string assyPath)?");
}

environment.prod.ts(在构建中替换)

prodUrls: ['company-project.com'],webauthn: {
  name: "Company DEV",rpId: "localhost"
}

webauthn.service.ts

prodUrls: ['company-project.com'],webauthn: {
  name: "Company Prod",rpId: "plattform.intra.company.com" // gets overridden by values in "prodUrls"
}

问题

  • 它在本地工作,使用 rpId 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; } (后端和前端都在本地)
  • 它不适用于登台 --> 后端抛出

WebAuthnException 消息:rpIdHash 与预配置的 rpId 的哈希不匹配。

  • 应该使用 localhost 作为 rpId 在 Prod 上工作(害怕部署,因为它不适用于登台)

我尝试了什么

对于暂存,我将 rpId 更改为 company-project.com,我可以在“main”中注册登录登录“查看器”也会引发错误

规范对什么应该起作用不是很具体:https://www.w3.org/TR/webauthn/#relying-party-identifier,它只说明什么不应该起作用。我认为,多个子域会使登台的事情复杂化吗?

用于登台的正确 rpId 是什么?假设 develop.plattform.intra.company.com 作为 rpId 应该适用于 prod 是否正确?

解决方法

为了登台,我将 rpId 更改为 develop.plattform.intra.company.com,我可以在“main”中注册和登录。登录“查看器”也会引发错误

获取断言的代码是什么?您可能还会遇到this other question。您需要将获取断言 RP ID 设置为与用于注册的 RP ID 相同。如果您不这样做,它将默认为源,对于您的子域将有所不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。