namespace Dpz.Core.Auth;
public static class AuthHelper
{
private const string ShellViewPath = "~/Views/Shared/_Shell.cshtml";
public const string UserVerificationRequiredMessage =
"Passkey 未完成用户验证。请重新点击 Passkey 登录,并在浏览器弹窗中选择 Windows Hello、PIN、指纹或人脸验证;如果仍失败,请重新绑定 Passkey。";
public const string GenericWebAuthnVerificationFailureMessage = "Passkey 验证失败,请重新开始";
public static string ToBase64Url(byte[] source)
{
return Convert.ToBase64String(source).TrimEnd('=').Replace('+', '-').Replace('/', '_');
}
public static byte[] FromBase64Url(string source)
{
var value = source.Replace('-', '+').Replace('_', '/');
return Convert.FromBase64String(
value.PadRight(value.Length + (4 - value.Length % 4) % 4, '=')
);
}
public static bool IsUserVerificationRequired(Fido2VerificationException exception) =>
exception.Message.Contains("User Verified flag not set", StringComparison.Ordinal);
extension(Controller controller)
{
public ViewResult ShellView(AuthShellViewModel model)
{
return controller.View(ShellViewPath, model);
}
}
extension<T>(IPagedList<T> pagedList)
{
public ResponseResult<PagedListWarp<T>> ToPagedResult()
{
return ResponseResult<PagedListWarp<T>>.Ok(pagedList.ToPagedListWarp());
}
}
extension<T>(ActionResult<T> result)
{
public ResponseResult<T> ToResponseResult()
{
if (result.Value is not null)
{
return ResponseResult<T>.Ok(result.Value);
}
return result.Result switch
{
OkObjectResult { Value: T value } => ResponseResult<T>.Ok(value),
BadRequestObjectResult badRequest => ResponseResult<T>.Fail(
badRequest.Value?.ToString() ?? "上传失败"
),
ObjectResult { Value: string message } => ResponseResult<T>.Fail(message),
_ => ResponseResult<T>.Fail("上传失败"),
};
}
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
AuthHelper 代码解释
这是一个位于 Dpz.Core.Auth 命名空间下的静态辅助类,主要提供身份认证相关的工具方法和扩展方法。
主要组成部分
1. 常量定义
private const string ShellViewPath = "~/Views/Shared/_Shell.cshtml";
- 定义了一个共享视图的路径
public const string UserVerificationRequiredMessage
public const string GenericWebAuthnVerificationFailureMessage
- 定义了两个 Passkey(WebAuthn)认证相关的错误提示消息
2. Base64Url 编码/解码方法
public static string ToBase64Url(byte[] source)
- 将字节数组转换为 Base64Url 格式
- 移除末尾的
=填充字符 - 将
+替换为-,/替换为_ - 这是 WebAuthn/JWT 等标准中使用的 URL 安全的 Base64 编码格式
public static byte[] FromBase64Url(string source)
- Base64Url 解码,反向操作
- 恢复标准 Base64 字符并添加必要的填充
3. 用户验证检查方法
public static bool IsUserVerificationRequired(Fido2VerificationException exception)
- 检查 Fido2 异常是否因为缺少用户验证标志而失败
4. 扩展方法(Extensions)
Controller 扩展
extension(Controller controller)
{
public ViewResult ShellView(AuthShellViewModel model)
}
- 为 Controller 添加便捷方法,返回特定的 Shell 视图
分页列表扩展
extension<T>(IPagedList<T> pagedList)
{
public ResponseResult<PagedListWarp<T>> ToPagedResult()
}
- 将分页列表转换为统一的响应结果格式
ActionResult 扩展
extension<T>(ActionResult<T> result)
{
public ResponseResult<T> ToResponseResult()
}
- 将 ASP.NET Core 的
ActionResult<T>转换为统一的ResponseResult<T>格式 - 处理多种结果类型:
- 直接值
OkObjectResultBadRequestObjectResult- 其他
ObjectResult
- 统一错误消息处理
应用场景
这个类主要用于:
- WebAuthn/Passkey 认证:提供编码转换和错误处理
- 统一响应格式:将不同类型的结果转换为统一的
ResponseResult格式 - 视图渲染辅助:简化 Controller 中的视图返回操作
- 分页数据处理:标准化分页结果的返回格式
AI 正在分析代码…
评论加载中...