由于拆分架构导致的 WebAuthn 问题

问题描述

我目前正在 .Net 5.0 中的独立(非 .Net Core 托管)Blazor WebAssembly 应用程序中进行开发。我一直在尝试将几个 Asp.Net MVC WebAuthn 示例转换为我的 Blazor 应用程序以进行无密码身份验证。

我现在遇到的问题是由于此应用程序的架构造成的,因为它不是 Blazor 服务器应用程序。我遵循的 Asp.Net MVC 示例包含所有内容包括托管在服务器上的客户端,而我的应用程序是拆分的 Web 客户端/Web API 架构。

然而,到目前为止,我已经设法解决了这些差异,但现在我遇到的问题是在 Fido2NetLib 库的 Make Credential 请求中向服务器注册凭证的最后一个功能。在线:

 // 2. Verify and make the credentials
 var success = await _lib.MakeNewCredentialAsync(attestationResponse,options,callback);

我收到一条错误消息:“来源 https://localhost:44325 不等于原始来源 https://localhost:44309”。现在当然这是一个开发环境,但它在生产环境中完全相同,因为 API 和客户端托管在两个不同的域中。

任何想法将不胜感激。我希望我可以将某些域“列入白名单”或完全删除要求?

解决方法

WebAuthn 将源定义为 fully qualified origin。根据引用的 RFC6454,这是方案、主机和端口的元组。不偏离标准就不能违反规则。

,

WebAuthn 非常适合使用单独的身份提供者(例如,基于 Open ID Connect/IdentityServer4 的东西)作为处理凭据的来源将始终相同,无论涉及的依赖方如何。