没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:张蓉|2025-05-22 11:06:07.247|阅读 1 次
概述:在当今的数字环境中,确保安全且用户友好的身份验证方法对于保护用户数据和提升用户体验至关重要。通行密钥认证(Passkey authentication)便是一种备受关注的方法,它利用 FIDO2 标准提供无密码、抗网络钓鱼的安全保护。 在本文中,我们将探讨如何使用 fido2-net-lib(一个简化 FIDO2 身份验证集成的.NET 库)在ASP.NET Core 应用程序中实现通行密钥认证。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
Syncfusion 推出的ASP.NET Core UI 控件库,由 Essential JS 2 驱动,是构建应用程序的得力工具。它拥有超 90 个组件,能满足各类业务需求。该库轻量且模块化,按需引用可减少应用体积。组件性能卓越,响应式设计且触摸友好,能适配多种设备。
在当今的数字环境中,确保安全且用户友好的身份验证方法对于保护用户数据和提升用户体验至关重要。通行密钥认证(Passkey authentication)便是一种备受关注的方法,它利用 FIDO2 标准提供无密码、抗网络钓鱼的安全保护。
在本文中,我们将探讨如何使用 fido2-net-lib(一个简化 FIDO2 身份验证集成的.NET 库)在ASP.NET Core 应用程序中实现通行密钥认证。
Essential Studio for ASP.NET Core 正版试用下载
通行密钥认证是基于公钥密码学的无密码身份验证方式,用户设备生成密钥对(公钥存服务器、私钥留设备),认证时设备用私钥签名服务器发送的挑战信息,无需传输身份数据即可完成验证,兼具安全性与易用性。
要在我们的网站上实现通行密钥认证,需先设置 fido2-net-lib 库。请按照以下步骤操作:
步骤 1:安装 fido2-net-lib
首先,在你的 .NET 项目中安装 fido2-net-lib 包。你可以通过 NuGet 包管理器或 .NET CLI 进行安装:
dotnet add package fido2-net-lib步骤 2:设置项目
using Fido2NetLib; public void ConfigureServices(IServiceCollection services) { services.AddFido2(options => { options.ServerDomain = "example.com", options.ServerName = "Example", options.Origins = "//example.com" }; }步骤 4:通行密钥注册
请参考以下代码示例生成认证选项。
· 用户信息:第一个参数是 Fido2User 对象,包含用户的显示名称、用户名和唯一标识符等信息。
· 排除列表:第二个参数是 PublicKeyCredentialDescriptor 对象列表,可用于排除某些凭证的使用。例如,可防止用户多次注册同一设备。
· 认证器选择:第三个参数是 AuthenticatorSelection 对象,用于定义选择认证器的标准。例如,可指定仅允许跨平台认证器。
· 认证传输偏好:最后一个参数是 AttestationConveyancePreference 枚举,指示认证数据应如何传输给依赖方,选项包括 None(无)、Indirect(间接)和 Direct(直接)。
生成的认证选项将以 JSON 响应形式发送到用户设备,用户设备将使用这些选项创建新的密钥对并返回一个认证对象。
注册凭证
要完成注册流程,需实现客户端逻辑,使用认证选项创建新凭证。这包括通过 navigator.credentials.create () API 调用传入认证选项。
当客户端返回响应时,我们验证并存储凭证。
[Route("/register")] public async Task<JsonResult> MakeCredential([FromBody] AuthenticatorAttestationRawResponse attestationResponse, CancellationToken cancellationToken) { // 1. Get the options that we sent to the client var jsonOptions = HttpContext.Session.GetString("fido2.attestationOptions"); var options = CredentialCreateOptions.FromJson(jsonOptions); // 2. Create a callback so that lib can verify that the credential id is unique to this user IsCredentialIdUniqueToUserAsyncDelegate callback = static async (args, cancellationToken) => { var users = await Storage.GetUsersByCredentialIdAsync(args.CredentialId, cancellationToken); if (users.Count > 0) return false; return true; }; // 2. Verify and make the credentials var credential = await fido.MakeNewCredentialAsync(attestationResponse, options, callback, cancellationToken: cancellationToken); // 3. Store the credentials in the database Storage.AddCredential(options.User, new Credential { Id = credential.Id, PublicKey = credential.PublicKey, SignCount = credential.SignCount, RegDate = DateTimeOffset.UtcNow, Transports = credential.Transports, IsBackedUp = credential.IsBackedUp, userId = userId, DeviceName = "User Device 1" }); // 4. Return "ok" to the client return Json(credential.Status);}
MakeNewCredentialAsync 方法用于验证客户端的认证响应,并在验证成功时创建新凭证。该方法确保注册流程的安全性和完整性。
用户完成设备注册后,需实现认证流程以验证其身份。该过程包括生成断言选项、将其发送至用户设备,然后验证响应以完成用户登录。
生成断言选项
请参考以下代码示例生成断言选项。
[Route("/AssertionOptions")] public JsonResult AssertionOptionsPost(string email) { // 1. Get user from DB var user = DemoStorage.GetUser(username); // 2. Get registered credentials from the database List<PublicKeyCredentialDescriptor> existingCredentials = Storage.GetCredentialsByUser(user).Select(c => c.Descriptor).ToList(); // 3. Assertion options var options = fido.GetAssertionOptions( existingCredentials, UserVerificationRequirement.Preferred ); // 4. Temporarily store options, session/in-memory cache/redis/db HttpContext.Session.SetString("fido2.assertionOptions", options.ToJson()); // 5. Return options to the client return Json(options); }
GetAssertionOptions 方法生成设备认证所需的断言选项(含网站、用户信息及挑战值)。
验证响应流程:
· 格式转换:将断言选项从 Base64URL 转为 Uint8Array(适配 WebAuthn 加密操作)。
· 生成断言:调用navigator.credentials.get()传入选项,触发设备生成含加密证明的断言。
· 响应准备:将断言组件转为 Base64URL 格式以便网络传输。
· 服务器验证:将响应发送至服务器完成身份验证。
当客户端返回响应时,验证凭证以使用凭证登录。
当客户端返回响应时,验证凭证以使用凭证登录。
[Route("/VerifyPasskey")] public async Task<JsonResult> MakeAssertion(VerifyPasskeyResponse clientResponse, CancellationToken cancellationToken) { // 1. Get the assertion options we sent the client and remove them from storage var jsonOptions = HttpContext.Session.GetString("fido2.assertionOptions"); HttpContext.Session.Remove("fido2.assertionOptions"); var options = AssertionOptions.FromJson(jsonOptions); // 2. Get registered credentials from the database StoredCredential creds = Storage.GetCredentialById(clientResponse.Id); // 3. Get credential counter from the database var storedCounter = creds.SignatureCounter; // 4. Create a callback to check if userhandle owns the credentialId IsUserHandleOwnerOfCredentialIdAsync callback = async (args) => { List<StoredCredential> storedCreds = await DemoStorage.GetCredentialsByUserHandleAsync(args.UserHandle); return storedCreds.Exists(c => c.Descriptor.Id.SequenceEqual(args.CredentialId)); }; // 5. Make the assertion var res = await fido.MakeAssertionAsync(clientResponse, options, creds.PublicKey, storedCounter, callback); // 6. Store the updated counter DemoStorage.UpdateCounter(res.CredentialId, res.Counter); // 7. return OK to client return Json(res); }
· 反序列化:首先将接收到的断言响应转换为可处理的数据格式。
· 凭证检索:从数据库中获取用户存储的凭证信息(如与通行密钥关联的公钥)。
· 构建验证请求:创建包含挑战值、用户凭证及其他验证参数的请求对象。
· 验证签名:通过 FIDO2 库验证断言的签名有效性,确认用户对凭证的所有权。
若验证成功,用户将被授予系统访问权限。该方法是实现安全无密码认证的核心组件,能够简化认证流程,同时提升安全性与用户体验。
慧都科技是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都科技作为 Syncfusion 的中国区合作伙伴,Syncfusion 作为 UI 组件研发领域的领先技术提供商,提供 Essential Studio 等强大工具,助力企业实现高效的应用开发与管理。Essential Studio 包括 1900 多个组件和框架,支持 WinForms 等多个主流开发平台,其组件功能强大,可满足大量数据处理需求。Essential Studio 提供丰富的学习资源,包括视频教程、文档和知识库,帮助开发者快速掌握使用方法。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@dpuzeg.cn
可视化项目时间线对于有效规划和跟踪至关重要。在本篇教程中,您将学习如何使用 C# 在 Excel 中创建组合图,只需几行代码,即可自动生成动态、美观的组合图。
本文将为大家介绍DevExpress XAF将.NET Aspire集成到Blazor项目中后如何实现数据库依赖,欢迎下载最新版组件体验!
FP3 文件是使用流行的报表生成工具FastReport创建的报表。这种格式广泛用于存储可立即查看的报表数据,这些数据可以轻松共享或保存以供日后分析。但是,要打开和查看此类文件,需要一个特殊的程序——FastReport Viewer。
邮件合并功能让您能够轻松批量创建个性化文档,例如信函、电子邮件、发票或证书。在本文中,我们将向您展示如何使用 C# 从 Excel 执行邮件合并。
帮您创建在Windows,Linux和Mac上运行的Web应用程序
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@dpuzeg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢