web开发已经流行了很多年,登录与授权也基本有一套通用的流程,下面是我自己常用的登录与授权方式,欢迎大家讨论与吐槽.
概念:
登录是过程,授权是结果.登录只是为了获得页面的访问权限 or 操作权限 or 数据权限 or api调用权限.
登录授权分为两个域:用户域和权限域.
用户域:用户信息,角色信息。
用户信息:登录帐号,登录密码,用户名,角色,机构,部门等。
角色信息:角色名,机构,部门等。
权限域:模块信息,权限信息,角色权限。
模块信息:应用中的一个功能块,可以是一个页面(api),也可以是多个页面(api),拥有唯一标识。
权限信息:模块里的功能单元,比如增、删、改、查等。
角色权限:保存角色拥有的权限信息。
登录:
登录通常是用户输入账号、密码、验证码然后提交表单进行身份校验然后保存授权信息,现在还有扫码登录。
保存授权信息:
Cookie:把用户信息加密后保存在Cookie中。
Session:登录成功后在Cookie里保存SessionId和用户标识。
对比:
Cookie:
优点:不占服务器资源(Cpu资源除外,因为如果信息量大,解密过程很耗资源),使用方便。
缺点:容量有限且不安全。
Session:目前流行的是使用缓存数据库来充当Session服务,例如Redis和Memcache.
优点:
1、容量可根据需求无限拓展,可以很方便的建立独立的登录授权中心。
2、相较于Cookie,数据非常安全,SessionId是随机和易变的,只有SessionId对应的session信息和用户标识全匹配才算成功。
3、可以很方便拓展成独立的登录中心以实现统一登录。
缺点:过程稍微复杂。
授权:
授权发生在功能模块的入口处,流程如下。
1、获取用户的登录信息(from Cookie or Session)。
2、通过模块模块唯一标识和用户角色信息获取当前用户在当前模块的权限。
3、把用户当前模块的权限信息写入上下文(HttpContext)中(避免一个请求多次读取权限信息,后面的操作就可以直接从上下文中获取)