本文审视了认证和身份验证,并描述了应验证的内容和一些概念。随着向数字世界迁移流程的推动以及新的威胁模型出现,认证和身份验证必须以专业的方式实现。建议采用OpenID Connect、OAuth和OpenID VCs等标准。
什么是认证?
认证是验证一个身份(可以是用户、系统、设备、机器人、AI代理或应用程序)的过程。在具有用户交互的Web应用程序中,应用程序和用户都需要被认证。OpenID Connect公共客户端不对应用程序进行认证,因此不应用于Web应用程序。
什么是身份?
数字身份是个人、组织或设备在线上的一种表示,它允许软件对该身份进行认证。一个用户可以拥有多个身份。身份通常作为一组声明(claims)从受信任的身份提供者以签名令牌的形式返回。
认证等级
存在不同的认证等级,只有在理解了认证等级的情况下,每个等级才能被信任。在下面的列表中,1代表最好的认证方法,4代表最差。Passkeys认证是实现认证的最佳方式,在列表中,它是唯一能抵抗网络钓鱼攻击的方式。安全的认证只使用能抵抗网络钓鱼的认证方法,包括恢复流程。像Microsoft、Google、PING ID和OKTA验证器这样的认证应用不能抵抗网络钓鱼,并且不如Passkeys安全。OpenID可验证凭证也属于此类。这不应在管理员业务案例或高安全性用例中用于认证。第三组包括使用短信或电子邮件认证的2FA流程。任何可以自动化的认证过程都不是真正安全的,因为机器人、AI代理同样可以自动化这个过程。使用TOTP的MFA不再是安全的认证实现方式。这通常用于企业共享账户。这组实际上是两步验证,而不是2FA。第4类是最差的,应避免使用。例如,企业中用于保护防火墙的Firewall密钥或单因素密码。
- Passkeys(公钥/私钥证书认证)
- 验证器应用、OpenID可验证凭证(E-ID、swiyu)
- 短信、电子邮件、TOTP、两步验证
- 单因素、SAS密钥、API密钥、密码、OTP
身份等级
所有身份都是以不同方式创建的。身份的创建和验证方式在数字世界中至关重要,身份只能在不同的信任等级上被信任。重要的是,软件应传达身份等级,以便客户端应用程序可以验证。创建数字身份有不同方式。在以下列表中,1代表最高信任级别,5代表最低。
- 由可信组织中的受信任官员进行离线人工身份验证。
- OpenID可验证凭证(E-ID、swiyu)、政府颁发。
- 与本人进行的数字在线验证。
- 无本人的数字视频验证。
- 电子邮件和短信验证。
专业的认证与身份验证
在数字世界中进行专业的认证和身份检查,应以真实的形式共享并验证认证等级和身份等级,例如使用基于某些OpenID、OAuth标准的签名令牌。可以如下实现:
- 用户(个人)在身份提供者上创建一个账户。
- 用户使用2个或更多Passkeys添加认证方法。
- 用户使用Passkeys进行认证,并使用OpenID可验证凭证(E-ID、swiyu)识别自己。所需的身份数据被持久化到账户中,除非使用OpenID可验证凭证(E-ID、swiyu)并通过必要检查进行更新,否则无法更改。
- 用户可以使用OpenID Connect和Passkeys认证在线进行认证。例如:Web应用程序:使用PAR和客户端断言的OIDC机密客户端,用于访问令牌的OAuth DPoP。
- 代表已认证身份的认证等级和身份等级声明在id_token(如果需要,在DPoP访问令牌中)中返回。令牌使用推荐的异步加密进行签名,客户端验证签名。客户端必须对敏感流程(例如电子收集)的声明进行验证。
说明
一旦账户使用了Passkeys并已通过OpenID可验证凭证识别,用户就不再需要使用OpenID VC身份检查,因为Passkeys提供了更高的认证等级并且已经与身份关联。身份已固定到被认证的账户。使用可验证凭证进行认证不能提供强认证,这不能抵抗网络钓鱼攻击。 在后续文章中,我将使用Duende IdentityServer和基于swiyu实现的OpenID可验证凭证来实现这一点。
链接
- 认证金字塔
- 使用Keycloak实现ASP.NET Core OpenID Connect以满足认证等级要求
- https://github.com/damienbod/sien-agov-poc
- OpenID可验证凭证颁发
- OpenID可验证呈现
- https://duendesoftware.com/blog/20250701-step-up-challenges-for-aspnet-core-client-apps-with-duende-identityserver
- 自主身份面临的挑战
- 扫描二维码认证安全吗?
- 使用自主身份时在线用户认证的问题