ASP.NET Core Web API 集成测试中使用 Bearer Token

在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. 

在那里我使用了测试专用的Startup类, 里面的配置和开发时有一些区别, 例如里面去掉了用户身份验证相关的中间件.

但是有些被测试的行为里面需要用到身份/授权信息.

所以本文就介绍一下在API集成测试中发送请求时使用Bearer Token作为Authorization Header的情况.

集成测试中使用Bearer Token

我这个项目里生产时使用的是Identity Server 4, 而进行集成测试时使用Identity Server 4可能会不太方便, 所以我决定简化一下, 把这项工作就仅限制在API和测试项目这两个项目里.

首先为被测试系统添加授权/身份验证中间件, 修改StartupIntegrationTest:

在ConfigureServices()方法里, 首先添加一个权限策略, 要求所有的MVC Controller只有授权的用户才能访问.

随后使用AddAuthentication()添加身份验证中间件, 并设置Bearer作为方案, 通过AddJwtBearer()进行一些参数配置.

这里需要用到一个secret, 因为测试项目会用到, 所以暂时我把它弄成静态属性了.

最后在Configure()方法里使用该中间件即可.

来到集成测试项目的TestServerFixture类, 先要要做的就是使用上面的secret生成token, 并在HttpClient里设置Authorization Header即可:

生成token的代码里可以设置Identity Claims. 这里我只添加了Name和Role.

然后我们试试, 找一个集成测试进行调试, 我使用的是VSCode, 点击方法上面的debug:

我在被测试方法里添加了一些傻代码, 以便调试用户信息:

查看Claims:

可以看到在测试代码里设置了Identity Claims了, 说明使用Bearer Token成功了.

测试身份验证中间件

被测试系统使用了身份中间件: app.UserAnthentication(), 我们也可以测试一下这个中间件的功能, 如果Token不正确的话, 就应该返回401 UnAuthorized状态码:

这个测试代码很简单, 就是设置了一个不正确的token, 并Assert返回状态码是401.

该测试会通过:

文章略短, 就介绍到这.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

Redis慢日志+扩展模块+存储session+主从配置

4185
来自专栏mathor

response.sendRedirect()的用法

 response和request一样都是jsp内置对象,request是获取用户的请求,response处理用户请求。sendRedirect()函数的作用是...

1.2K4
来自专栏Java后端生活

JavaWeb(十)Session

2647
来自专栏openshift持续集成

配置jenkins邮件通知(openshift)

进入“系统管理”>>>“插件管理”安装邮件通知插件Email Ext Recipients Column Plugin,Email Extension Plug...

52713
来自专栏FreeBuf

任意代码保护与内核代码注入的那些事儿

类似 WannaCry 和 Slingshot 这样的恶意软件最常用的一种攻击技术就是内核代码注入,在近期刚刚发布的 Windows 10 Creators 更...

1060
来自专栏散尽浮华

git push上传代码到gitlab上,报错401/403(或需要输入用户名和密码)

之前部署的gitlab,采用ssh方式连接gitlab,在客户机上产生公钥上传到gitlab的SSH-Keys里,git clone下载和git push上传都...

76810
来自专栏大数据实战演练

Nginx安装配置及使用

-bash:warning:setlocale:LC_CTYPE:cannot change locale(en_US.UTF-8):Nosuch fileor...

3642
来自专栏运维小白

11.24 静态元素过期时间

配置静态元素过期时间目录概要 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了 增加配置 <IfModule mod_e...

1849
来自专栏程序员叨叨叨

听说你使用Android Studio遇到了一些小困惑

这个问题通常出现在Android Studio更新失败的时候,原因是download http://services.gradle.org/distributi...

1014
来自专栏我思故我在

ABP框架 - 启动配置

2035

扫码关注云+社区

领取腾讯云代金券