从零开始,构建前后端分离的博客系统三(jwt认证协议与RBAC用户角色权限的实践)

因为期末考试加上种种原因,没有及时更新博客,趁着假期时间,将欠下的债补上。在之前的博客系统代码中前端路由控制是通过登陆请求,成功返回uuid给前端,然后前端通过验证是否有uuid来实现前端路由的权限控制。在之后设计中,我意识到两个重要的问题问题一: 当api获取方式只有我一个人知道的时候,这种api访问无控制问题或许无关紧要,但是当有其他人知道,并借此来攻击我的服务器,那么我的服务器就只能...
摘要由CSDN通过智能技术生成
因为期末考试加上种种原因,没有及时更新博客,趁着假期时间,将欠下的债补上。

在之前的博客系统代码中前端路由控制是通过登陆请求,成功返回uuid给前端,然后前端通过验证是否有uuid来实现前端路由的权限控制。在之后设计中,我意识到两个重要的问题

问题一: 当api获取方式只有我一个人知道的时候,这种api访问无控制问题或许无关紧要,但是当有其他人知道,并借此来攻击我的服务器,那么我的服务器就只能凉凉~~
问题二:博客的访问用户分为匿名访客、普通会员、管理员,不同角色可以访问api的权限是不同的,需要控制其访问
  • 为什么使用jwt

    当想到这种问题,却没有解决方案时,第一反应时在网上搜,庆幸的是(手动狗头),在我之前很多人遇到这种问题,并且有一套成熟的解决方案,那么就是oauth授权框架,它与本文jwt有一定联系,却不能相提并论,毕竟一个是协议,一个是框架,毕竟我只是一个小博客项目,没有精力也没有必要使用一整套框架,来实现一个小小的业务场景。所以我使用了jwt协议,来保障api的访问安全。

  • jwt协议

    JSON Web Token (JWT)
    JWT在标准中是这么定义的:
    JWT是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token(令牌),用户可以使用这个token访问服务器上受保护的资源。
    一个token的例子:
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
    一个完整的token组成分为三部分它们由.分割:header、payload、Signature签名。具体jwt的知识请点击这个链接,阮一峰大佬

  • jwt具体实现

    我选择了pyjwt库进行token的生成与解析 pyjwt文档

    token的生成:

     @staticmethod
    def encode_token(user_name):
        try:
    
            headers = {
         
                "typ": "JWT",
                "alg": "HS256",
            }
            payload = {
         
                "headers": headers,
                'exp': datetime.utcnow() + timedelta(days=0, seconds=10),
                'iat': datetime.utcnow(),
                'iss': 'yker',
                'data': {
         
                    'user_name': user_name
                }
            }
            return jwt.encode(payload, 'secret', 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值