功能
Authentication: 你是谁? Sometimes referred to as ‘login’, this is the act of proving a user is who they say they are.
Authorization: 你能干什么? The process of access control, i.e. determining ‘who’ has access to ‘what’.
Session Management: 状态管理. Managing user-specific sessions, even in non-web or EJB applications.
Cryptography: 数据加密. Keeping data secure using cryptographic algorithms while still being easy to use.
架构
概念
Subject
校验实体, (user, 3rd-party service, cron job, etc)SecurityManager
管理每个subject的安全操作, 保证功能流畅进行Authenticator
负责登录管理(login), 通过和Realms通信来验证user身份Authorizer
负责权限管理, user能否有权限进行操作SessionManager
Session管理, 维护用户session, 可以通过SessionDAO持久化CacheManager
负责cache管理
Cryptography
加解密管理Realms
负责连接应用和数据源的bridge.
流程
1. 身份校验(authentication)
核心概念:
Principal: 身份信息, 比如username
Credential: 认证信息, 比如password, fingerprints
Remembered: 登录过, 表示一种过去式的状态, 可以显示不敏感信息, 和Authenticated状态互斥.
Authenticated: 认证过, 表示刚刚进行了认证, 可以显示敏感信息. 和Remembered状态互斥.
Authentication Strategy: 认证策略, 在多个reamls时生效, 可以是满足一个reamls即成功(AtLeastOne), 也可以是满足所有reamls才成功(AllSuccessful)
架构/流程:
2. 权限认证(Authorization)
核心概念:
permissions: 权限, 安全策略的最小单位, 代表对资源的动作(actions on resources). 权限只和行为相关, 与操作人(who, subject)无关.
- granularity: 粒度, 权限可以是某类资源(file, customer), 也可以是某个资源(“jsmith”). 这代表粒度大小的不同.
roles: 角色, 一系列权限的集合和抽象. 通过将用户和角色关联, 可以为用户赋予权限.
隐性角色, 没有明确的将角色和权限关联, 只是针对不同的角色通过编码进行权限区分.
显性角色(推荐), 明确的将角色定义为一系列权限的集合.
users: 用户. 即subject. 是权限中的who, 通过和role或者permission关联来决定是否有权限进行操作.
架构/流程:
3. 领域(Realms)
本质安全相关数据的DAO. 在认证过程中获取principals和credentials并提供matcher. 在授权过程中提供角色/权限匹配.
4. Session管理
关键功能:
POJO base
Custom Storage
Cluster
Event Listeners
支持request/subject级开启/关闭
支持scheduler定时清理, 避免失效session占用过多内存