如何对django api做权限限制

前面的篇章,我们搭建了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这个库。

如何对django api做权限限制

requirements.txt

安装好之后,需要修改settings.py文件,enable 认证相关的配置。

如何对django api做权限限制

installed app

如何对django api做权限限制

settings.py

接下来我们自定义了一个用户profile,可以添加更多的field,比如用户的role,来做更多的角色的限制。

如何对django api做权限限制

models.py

接着我们需要修改root urls文件,注册rest-auth的路由。

如何对django api做权限限制

urls.py

最后,我们只需要在路由具体实现里面,给viewset添加认证和权限的classes就可以了。

如何对django api做权限限制

这里的permission_classes,我们只是简单了添加是否认证的判断,如果api有不同的角色用户的话,还可以对用户的role来做判断,进一步限制不同角色的用户对api的权限访问。

最后我们访问docs页面,去调用todos列表接口看一下。

如何对django api做权限限制

我们可以看到返回401提示用户没有认证。

接着,我们来认证用户,获取token,再次调用一下。

如何对django api做权限限制

输入用户名密码,认证

如何对django api做权限限制

返回token信息

如何对django api做权限限制

输入token验证

如何对django api做权限限制

带有token调用api,返回200成功。

到这,我们就对自己的api做了权限的限制。谢谢大家。


分享到:


相關文章: