记一例asp.net core3.1 jwt基于角色授权问题(越权访问)

记一例asp.net core3.1 jwt基于角色授权问题(越权访问)

1984发表于2019-12-21

最近在研究asp.net core jwt基于角色授权方案,发现可以通过修改自己的角色然后越权访问返回数据。大家使用的时候一定要注意。

一、准备项目

1、首先定义一个获取token的endpoint

from clipboard


认证返回token的实现方法如下:

from clipboard

定义在返回的token声明了一个角色Claim,角色名为lanhu。

2、获取token

用postman获取token

from clipboard

把返回的token放在https://jwt.io/

验证一下:

from clipboard

可以看到在playload中有角色名lanhu。

接下来我们用这个token去访问接口:http://localhost:20359/users

from clipboard

结果如下:

from clipboard

返回403,说明被禁止访问。

二、伪造角色

我们伪造成admin角色,修改playload中的role为admin,并把重新生成的jwt token去访问刚才的接口。

from clipboard

请求结果:

from clipboard

可以看到能正常的返回数据了。

三、总结

jwt中的信息都可以还原成明文,所以敏感信息一定不要放在playload中。jwt使用基于角色授权有越权访问的问题,一定要做好防伪造攻击。

常用的解决方案如下:

1、生成签名的key一定要保存好,不要泄漏

2、敏感信息要加密

3、采用TLS或https增加安全性


小编蓝狐