前言

关于本地测试如何进行Fake权限验证

正文

在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验证吧。

上图可能是我们本地测试的时候需要填写的一个token位置,本地测试不方便。

那么怎么伪造权限验证通过呢?

有两个前置篇:

  1. https://www.cnblogs.com/aoximin/p/15582365.html
  2. https://www.cnblogs.com/aoximin/p/15613974.html

通过这两个前置篇的阅读,可能马上就能知道下面表达所在了,但是及时不看也没用过关系。

在.net 框架验证的时候呢?

我们可以加入自己的验证方案的。

  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:

  1. 将伪造的信息生成ticket
  2. 将ticket注入到认证结果中去
  3. 返回认证结果

这个时候我们就伪造了认证的信息。

注意:授权是通过认证的信息进行授权的,那么我们伪造了认证的信息其实就是为了骗过授权。

然后我们将认证作为中间件进行封装成中间件模样:

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根据自己的验证需要进行动态调整即可。

上面简述了如何去伪造认证信息,用于本地测试,预发或者线上通过环境变量或者配置关闭即可。

Fake权限验证小例子的更多相关文章

  1. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

  2. ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...

  3. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  4. 基于 Annotation 拦截的 Spring AOP 权限验证方法

    基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...

  5. Shiro权限验证代码记录,正确找到shiro框架在什么地方做了权限识别

    权限验证方式的验证代码: org.apache.shiro.web.servlet.AdviceFilter这个类是所有shiro框架提供的默认权限验证实例类的父类 验证代码: public void ...

  6. Asp.net Mvc4 基于Authorize实现的模块权限验证方式

    在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...

  7. 【转】忙里偷闲写的小例子---读取android根目录下的文件或文件夹

    原文网址:http://www.cnblogs.com/wenjiang/p/3140055.html 最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还 ...

  8. MongoDB 权限 验证

    在MongoDB中,服务启动默认是没有权限验证的,就安全性方面来说,这肯定是不行的,所以需要加上权限验证. 既然是要进行权限验证,那肯定是得有用户的吧,所以权限验证的第一步就是给MongoDB库添加用 ...

  9. 我的Android进阶之旅------>Android拍照小例子

    今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...

  10. ABP应用层——权限验证

    ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerpla ...

随机推荐

  1. 云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权

    01 方案概述 MSE 网关可以为后端服务提供转发路由能力,在此基础上,一些敏感的后端服务需要特定认证授权的用户才能够访问.MSE 云原生网关致力于提供给云上用户体系化的安全解决方案,其中 JWT 认 ...

  2. Mybatis学习三(动态sql语句)

    动态sql语句主要为以下语句 1.动态SQL:if 语句2.动态SQL:if+where 语句3.动态SQL:if+set 语句4.动态SQL:choose(when,otherwise) 语句5.动 ...

  3. Solution Set - CDQ分治&整体二分

    A[洛谷P2163].给定平面上若干个点,多次询问给定矩形内的点数. B[洛谷P3810].给定若干个三元组,对所有\(k\),求这样三元组的个数:恰有\(k\)个三元组,满足其每个分量都不超过它的相 ...

  4. c#胖东来小程序自动购物程序(接单,windows桌面程序、linux程序、网络应用等等)

    一.程序效果 自动打开胖东来小程序,自动购物 二.实现 先截屏,然后利用opencv库识别下一步按键所在位置,然后使用mouse_event控制鼠标,模拟人的动作 第一步,截取屏幕 static Bi ...

  5. go-zero goctl命令图解

  6. FE宝典

    前端学科面试宝典 蔡威 [电子邮件地址] HTML5.CSS3..................................................................... ...

  7. IDEA社区版(IDEA Community Edition)创建Springboot父子项目

    1. 因为社区办不支持使用spring Spring Initializr 的方式创建项目, 但是我们可以考虑使用别的方式达到效果: 创建方式有3种: 第一种:使用https://start.spri ...

  8. IPv6 — 地址格式与寻址模式

    目录 文章目录 目录 前文列表 IPv6 的地址格式 站点前缀 地址生成方式 IPv6 地址的分类以及寻址模式 单播(Unicast)地址 Interface ID 全球唯一地址(Global Uni ...

  9. 【活动访谈】发力数字基座 推动物联创新—航天科技控股集团AIRIOT4.0平台发布会活动专访

    近日,由航天科技控股集团股份有限公司主办的"数字基座 智慧物联-AIRIOT4.0平台发布会"在北京圆满落幕.航天三院科技委总工程师王连宝应邀出席本次会议并接受媒体采访,共同参与访 ...

  10. 安装anaconda3卡在Unpacking payload ...

    ananconda3在centos7虚拟机上,直接进行ananconda3安装但是始终卡在Unpacking payload ..., 虚拟机的核心数调到2或者2以上即可解决