如何在本地测试中进行虚假权限验证
扫描二维码随身看资讯
使用手机 二维码应用 扫描右侧二维码,您可以
1. 在手机上细细品读~
2. 分享给您的微信好友或朋友圈~
前言
在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验证吧。
上图可能是我们本地测试的时候需要填写的一个token位置,本地测试不方便。
如何进行虚假权限验证
在.net框架验证的时候,我们可以加入自己的验证方案。通过自定义验证方案,可以实现虚假权限验证。
通过以下两个前置篇的阅读:
- https://www.cnblogs.com/aoximin/p/15582365.html
- https://www.cnblogs.com/aoximin/p/15613974.html
通过这两个前置篇的阅读,可能马上就能知道下面表达所在了,但是及时不看也没用过关系。
我们可以加入自己的验证方案的。
public virtual AuthenticationBuilder AddScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, string? displayName, Action<TOptions>? configureOptions)
where TOptions : AuthenticationSchemeOptions, new()
where THandler : AuthenticationHandler<TOptions>
=> AddSchemeHelper<TOptions, THandler>(authenticationScheme, displayName, configureOptions);
也就是说,我们可以自定义验证方案,那么我们加入我们的Fake方案,即可通过。
public class FakeAuthenticationOptions : AuthenticationSchemeOptions
{
public virtual ClaimsIdentity Identity { get; set; }
}
在Fake选项中加入了ClaimsIdentity,这个Identity就是我们要伪造的用户信息。
那么我们的handler就这样写:
public class FakeAuthenticationHandler: AuthenticationHandler<FakeAuthenticationOptions>
{
public FakeAuthenticationHandler(
IOptionsMonitor<FakeAuthenticationOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock)
: base(options, logger, encoder, clock)
{ }
protected override Task HandleChallengeAsync(AuthenticationProperties properties)
{
return Task.CompletedTask;
}
protected override Task HandleForbiddenAsync(AuthenticationProperties properties)
{
return Task.CompletedTask;
}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var principal = new ClaimsPrincipal(Options.Identity);
var ticket = new AuthenticationTicket(principal, new AuthenticationProperties(), Scheme.Name);
var result = AuthenticateResult.Success(ticket);
return Task.FromResult(result);
}
}
因为我们伪造信息是为了通过验证,那么Challenge(401)和Forbidden(403)我们直接Task.CompletedTask,不会出现这种情况。
那么我们认证的时候这样写HandleAuthenticateAsync:
- 将伪造的信息生成ticket
- 将ticket注入到认证结果中去
- 返回认证结果
这个时候我们就伪造了认证的信息。
注意:授权是通过认证的信息进行授权的,那么我们伪造了认证的信息其实就是为了骗过授权。
然后我们将认证作为中间件进行封装成中间件模样:
public static class FakeAuthenticationExtensions
{
public static AuthenticationBuilder AddFake(
this AuthenticationBuilder builder,
string scheme,
Action<FakeAuthenticationOptions> configureOptions)
=>
builder.AddScheme<FakeAuthenticationOptions, FakeAuthenticationHandler>(
scheme, scheme, configureOptions);
}
那么这个时候最好再加一个默认的方案名:
public class FakeScheme
{
public const string Default = "Fake";
}
那么我们注入scheme的时候就这样即可:
builder.AddFake(FakeScheme.Default, u =>
{
List<Claim> claims = new List<Claim>();
var userId = configuration.GetValue<string>("AuthServer:FakeUser");
claims.Add(new Claim(ClaimTypes.NameIdentifier, userId));
u.Identity = new ClaimsIdentity(claims, "Role");
});
这样就伪造了认证的信息了,然后这个claims根据自己的验证需要进行动态调整即可。
结论
上面简述了如何去伪造认证信息,用于本地测试,预发或者线上通过环境变量或者配置关闭即可。
- 挺进地牢安卓版
- 镜中鬼怪完整版
- 雅皮士精神安卓版
- 洛杉矶故事生活模拟
- 节奏盒子战争模组
- 世界盒子2024最新版
- 黄油猫
- 疯狂全明星2
- 沸腾者
- 完蛋我被美女包围了
- 海洋防线
- 诸神灰烬救赎
- 僵尸爆发
- 萌翻天消消乐无限金叶破解版2024 v4.3.56 最新版
- [python] Python日志记录库loguru使用指北
- 深度开发模式:按需开发与公共框架的平衡之道
- SQL Translator:将自然语言查询转换为SQL代码的工具
- 脚本化CSS
- HTTP响应头中的Content-Disposition和文件下载
- LLM 推理 - Nvidia TensorRT-LLM 与 Triton Inference Server
- libevent之evbuffer
- HarmonyOS SDK实况窗服务:提升用户服务体验的新型消息通知展示形式
- Redis企业级性能优化关键点和解决方案
- Spring Boot框架下实现Excel服务端导入导出详解
- 开源热搜项目:离线翻译软件RTranslator、爬虫框架katana和更多
- 使用代理方式打开网页及同步和异步写法对比
- 1
加查之花 正版
- 2
爪女孩 最新版
- 3
捕鱼大世界 无限金币版
- 4
企鹅岛 官方正版中文版
- 5
内蒙打大a真人版
- 6
烦人的村民 手机版
- 7
跳跃之王手游
- 8
球球英雄 手游
- 9
情商天花板 2024最新版
- 10
蛋仔派对 国服版本