前面的篇章,我们搭建了django的rest api服务,那么现在,我们就需要对api来做权限限制,不能让随便一个人就可以访问api接口。一般api访问的权限限制,包括basic的验证,每次的请求头中,带有username和password,access_token验证,一般是sso生成的access_token,通过token可以拿到用户的info,请求的header里面带有authorization: "Bearer access_token"。还有jwt(json web token),请求的头中带有authorization: "JWT token"。这里,我们就采用jwt,来作为用户的权限验证。
首先,我们需要安装依赖包,django-allauth,这个库还是很强大的,集成了django自带的用户验证系统,还支持各种第三方的sso用户认证,有兴趣的可以研究一下(https://github.com/pennersr/django-allauth)。可以自定义用户登陆模板页面,添加google,wechat等等的其他社交账户认证。这里我就只支持rest api认证,所以还需要安装django-rest-auth,这个就是把系统认证导出了rest接口,可以通过api认证用户。如果需要支持json web token,我们还需要djangorestframework-jwt这个库。
requirements.txt
安装好之后,需要修改settings.py文件,enable 认证相关的配置。
installed app
settings.py
接下来我们自定义了一个用户profile,可以添加更多的field,比如用户的role,来做更多的角色的限制。
models.py
接着我们需要修改root urls文件,注册rest-auth的路由。
urls.py
最后,我们只需要在路由具体实现里面,给viewset添加认证和权限的classes就可以了。
这里的permission_classes,我们只是简单了添加是否认证的判断,如果api有不同的角色用户的话,还可以对用户的role来做判断,进一步限制不同角色的用户对api的权限访问。
最后我们访问docs页面,去调用todos列表接口看一下。
我们可以看到返回401提示用户没有认证。
接着,我们来认证用户,获取token,再次调用一下。
输入用户名密码,认证
返回token信息
输入token验证
带有token调用api,返回200成功。
到这,我们就对自己的api做了权限的限制。谢谢大家。