资讯专栏INFORMATION COLUMN

一个简单的用户登录与访问权限控制设计

hersion / 2523人阅读

摘要:本文信息本文创建于文章更名为一个简单的用户登录与访问权限控制设计前述系统用户分为管理员用户普通用户管理员用户有且唯一系统初始状态不存咋任何用户首次使用需创建用户前端界面显示控制用户管理模块根据本地判断是否为管理员用户显示不显示用户管理模块导

本文信息

本文创建于2018/03/22

2018/10/30 文章更名为 一个简单的用户登录与访问权限控制设计

前述

系统用户分为管理员用户、普通用户

管理员用户有且唯一

系统初始状态不存咋任何用户,首次使用需创建用户(admin)

前端界面显示控制 用户管理模块

根据本地credentials判断是否为管理员用户 => 显示/不显示用户管理模块

导航栏模块

功能页面显示导航栏;welcome/login不显示导航栏

动态控制导航栏的显示与隐藏

前端本地控制(进入页面前)-- 路由守卫 welcome/login页面

是否本地存在credentials(包含token及用户信息)(是否属于已登录状态) => 跳转至首页/Next

发送请求至后端 => 后端确认是否首次使用系统(系统有/无任何用户)=> welcome/login页面

功能页面

是否本地存在credentials(是否属于已登录状态) => 进入功能页面/跳转至login

Admin页面

是否本地存在credentials(是否属于已登录状态) => Next/跳转至login

本地credentials是否显示用户为管理员类型 => 进入Admin页面/跳转至404页面

前端向后端请求验证(进入页面后)-- http拦截器 请求发送处理

每个heep请求在请求头带上本地credentials中的token

请求响应处理

返回401状态码 => 删除本地credentials(如果有),跳转至login

否则,不做特殊处理

后端登录与鉴权 登录逻辑

后端接收到前端发送的用户信息

将前端发送的用户信息(密码需在后端做hash处理)与数据库用户信息比对

若匹配,Next。若不匹配,返回incorrect/权限到期

缓存是否存在用户登录code(若不存在则生成随机code并存入缓存)

签入token,将用户信息(id,type等)、code写入token的payload,并设定token有效期

返回用户信息及token至前端

用户身份一般鉴定

token解码失败:包括无token、token过期、token的payload不包含需要的信息 => 返回401

token解码 => 得到用户信息(包括id、code等) => 对比code与缓存code是否一致 => Next/返回401

根据token得到的用户信息判断是否为管理员 => 鉴定成功/Next

非管理员检测用户是否已被删除(用户删除只更改数据库状态而非数据库删除) => 返回401/鉴定成功

创建用户鉴权

创建的是系统第一个用户

后端接收到前端发送的创建的用户信息 => 请求头是否没有携带token或是否创建的用户类型为管理员 => Next/返回401
判断是否为首次使用系统 => 创建用户/返回401

创建的不是系统第一个用户

后端接收到前端发送的创建的用户信息 => 请求头携带token => 判断token本身是否过期 =>返回401/Next

解码token => 解码后拿到用户信息 => 用户是否为管理员且与缓存token比对 => Next/返回401

创建用户 => 创建用户是否成功 => 返回success/Next

是否已存在同名用户 => 返回已存在同名用户提示/返回fail

修改用户信息鉴权

用户身份一般鉴定

若鉴定用户为管理员,鉴权成功;否则,Next

鉴定需要修改的用户信息是否为用户自己 => Next/返回401

鉴定旧密码是否正确 => 鉴权成功/返回旧密码incorrect

删除用户鉴权

用户身份一般鉴定

鉴定用户为管理员 => 鉴权成功/Next

Tips

修改用户密码/删除用户成功后,删除对应用户的缓存里的登录code

why not cookie => 无状态、防xss攻击、api多端共用

如何跨域共享用户登录状态

已经使用了jwt,为何还需loggedin-code => tips1即为原因

包含第三方登录的登录模块设计(OAuth协议)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93612.html

相关文章

  • springboot+shiro 整合基本应用

    摘要:用户只有授权后才允许访问相应的资源。权限安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。 简介 Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小...

    wthee 评论0 收藏0
  • 不用 Spring Security 可否?试试这个小而美安全框架

    摘要:写在前面在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题。用户的合法性与数据的可见性是数据安全中非常重要的一部分。 写在前面 在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题。用户的合法性与数据的可见性是数据安全中非常重要的一部分。但是,一方面,不同的应用对于数据的合法性和可见性要求的维度与粒度都有所区别;另一方面,以当前微服务、多服务的架构方式,如何共享Sessi...

    toddmark 评论0 收藏0
  • Yii2系列教程五:简单用户权限管理

    摘要:原文来自上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说之中的用户和权限控制。探寻上面的一些列设置和代码更改,已经实现了一小部分的用户控制登录的用户才能发表。 原文来自: https://jellybool.com/post/programming-with-yii2-user-access-controls 上一篇文章讲了用户的注册,验证和登录,这一篇文章按照...

    livem 评论0 收藏0
  • Spring Security

    摘要:框架具有轻便,开源的优点,所以本译见构建用户管理微服务五使用令牌和来实现身份验证往期译见系列文章在账号分享中持续连载,敬请查看在往期译见系列的文章中,我们已经建立了业务逻辑数据访问层和前端控制器但是忽略了对身份进行验证。 重拾后端之Spring Boot(四):使用JWT和Spring Security保护REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 评论0 收藏0
  • 基于 Spring Session & Spring Security 微服务权限控制

    摘要:构造函数的第一个参数是对象,所以可以自定义缓存对象。在微服务各个模块获取用户的这些信息的方法如下略权限控制启用基于方法的权限注解简单权限校验例如,删除角色的接口,仅允许拥有权限的用户访问。 showImg(https://segmentfault.com/img/remote/1460000019593311); 微服务架构 showImg(https://segmentfault.c...

    clasnake 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<