功能

  • 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.

架构

Shiro - 图1

概念

  • 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)

架构/流程:

Shiro - 图2

2. 权限认证(Authorization)

核心概念:

  • permissions: 权限, 安全策略的最小单位, 代表对资源的动作(actions on resources). 权限只和行为相关, 与操作人(who, subject)无关.

    • granularity: 粒度, 权限可以是某类资源(file, customer), 也可以是某个资源(“jsmith”). 这代表粒度大小的不同.
  • roles: 角色, 一系列权限的集合和抽象. 通过将用户和角色关联, 可以为用户赋予权限.

    • 隐性角色, 没有明确的将角色和权限关联, 只是针对不同的角色通过编码进行权限区分.

    • 显性角色(推荐), 明确的将角色定义为一系列权限的集合.

  • users: 用户. 即subject. 是权限中的who, 通过和role或者permission关联来决定是否有权限进行操作.

架构/流程:

Shiro - 图3

3. 领域(Realms)

本质安全相关数据的DAO. 在认证过程中获取principals和credentials并提供matcher. 在授权过程中提供角色/权限匹配.

4. Session管理

关键功能:

  • POJO base

  • Custom Storage

  • Cluster

  • Event Listeners

  • 支持request/subject级开启/关闭

  • 支持scheduler定时清理, 避免失效session占用过多内存