namespace Dpz.Core.Auth.Controllers.UserCenter;

[ApiController]
[Route("api/user/security")]
[Authorize]
public class UserSecurityController(
    IUserTwoFactorService userTwoFactorService,
    IUserWebAuthnCredentialService credentialService
) : ControllerBase
{
    [HttpGet]
    public async Task<ResponseResult<SecurityModel>> DetailAsync(
        CancellationToken cancellationToken = default
    )
    {
        var account = User.NameIdentifier;
        if (string.IsNullOrWhiteSpace(account))
        {
            return ResponseResult<SecurityModel>.Fail("用户未登录");
        }

        var twoFactorStatus = await userTwoFactorService.GetBindingStatusAsync(
            account,
            cancellationToken
        );
        var credentials = await credentialService.ListAsync(account, cancellationToken);
        var recommendations = new List<string>();
        if (!twoFactorStatus.HasTwoFactor)
        {
            recommendations.Add("建议绑定双因素认证,提升敏感操作保护强度");
        }
        var hasPasskey = credentials.Count > 0;
        if (!hasPasskey)
        {
            recommendations.Add("请添加 Passkey,完成当前必需的安全绑定");
        }

        return ResponseResult<SecurityModel>.Ok(
            new SecurityModel
            {
                HasTwoFactor = twoFactorStatus.HasTwoFactor,
                HasPasskey = hasPasskey,
                IsFullyBound = twoFactorStatus.HasTwoFactor && hasPasskey,
                HasRequiredSecurity = hasPasskey,
                RequiresSecurityOnboarding = !hasPasskey,
                PasskeyCount = credentials.Count,
                Recommendations = recommendations.ToArray(),
            }
        );
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码解释

这是一个 ASP.NET Core 的 Web API 控制器,用于管理用户的安全设置信息。

类结构

基本信息

  • 命名空间: Dpz.Core.Auth.Controllers.UserCenter
  • 控制器名称: UserSecurityController
  • 路由: /api/user/security
  • 访问控制: 需要身份验证 ([Authorize] 特性)

依赖注入

通过主构造函数注入两个服务:

  1. IUserTwoFactorService - 双因素认证服务
  2. IUserWebAuthnCredentialService - WebAuthn凭证服务(Passkey管理)

核心方法

DetailAsync 方法

功能: 获取当前用户的安全配置详情

HTTP方法: GET

执行流程:

  1. 用户验证

    var account = User.NameIdentifier;
    
    • 从当前认证用户中获取用户标识
    • 如果未登录,返回错误响应
  2. 查询安全状态

    • 查询双因素认证绑定状态
    • 查询 WebAuthn 凭证(Passkey)列表
  3. 生成安全建议

    • 如果未绑定双因素认证,建议用户绑定
    • 如果未添加 Passkey,提示这是必需的安全设置
  4. 返回安全模型 返回 SecurityModel 对象,包含:

    • HasTwoFactor: 是否已绑定双因素认证
    • HasPasskey: 是否已添加 Passkey
    • IsFullyBound: 是否完全绑定(双因素 + Passkey)
    • HasRequiredSecurity: 是否满足必需安全要求(有 Passkey)
    • RequiresSecurityOnboarding: 是否需要完成安全引导
    • PasskeyCount: Passkey 数量
    • Recommendations: 安全建议列表

业务逻辑要点

  1. Passkey 是必需的:从代码可以看出,系统将 Passkey 视为必需的安全措施
  2. 双因素认证是推荐的:作为额外的安全层,但不是强制的
  3. 安全评分系统:通过多个布尔字段反映用户的安全配置完整度

这个控制器为前端提供了一个统一的接口来展示用户的安全状态和改进建议。

评论加载中...