使用场景:

  • 移动端通过业务系统鉴权
  • 移动端免登录(登录一次以后)

解决方案:

  •  JWT(token认证方案)
  •  OAuth(第三方认证)

疑问

  当然我们这章是讲JWT,那么会有以下的疑问:

  若服务端已经接入了SSO,那么在移动端用户登录信息提交给SSO还是服务端?(毫无疑问是服务端,SSO对于移动端必须是透明的)

  若采用无会话方式,如何获取token,服务端如何鉴权?

1.提交用户名密码到服务端,服务端把数据给到sso,sso最终返回用户数据

2. 根据用户数据创建token返回给移动端

3. 移动端登录后请求都带token给到服务端鉴权

  在使用token鉴权的情况下,退出如何解决?(客户端丢弃token即可)

鉴权流程

  我们再讲一下整一个鉴权流程

CAS-技术专区-客户端集成(shiro springboot jwt pac4j)_SpringBoot

配置要素

  重点:sso必须支持 rest认证方式 


  io.buji
  buji-pac4j
  3.0.0


  org.pac4j
  pac4j-cas
  2.1.0


  org.pac4j
  pac4j-jwt
  2.1.0


  org.pac4j
  pac4j-http
  2.1.0

鉴权配置

若马上看下面的代码,估计一时半会看不懂,所以必须再讲一下整个交易过程

服务端鉴权过程有两个个角色分别为,Shiro、Pac4j,那他们的职责是什么?

Shiro:

  判断当前Subject是否有权限执行该资源,所以他的核心是Realm、Filter,只有被过滤到的资源才会走到Realm

Pac4j:

1. JWTAuthenticator对token进行鉴别
2. CasRestFormClient 支持通过rest接口传入用户名密码进行对sso进行认证获取UserProfile
3. Pac4jRealm鉴权的realm
4. SubjectFactory需要调整成Pac4jSubjectFactory

ShiroConfiguration.java

token生成