Shiro的统一认证受权

Shiro的统一认证受权git

Shiro是Apache下面的一个简单,易用的Java权限框架,对于单体应用来说,Shiro彻底可以极好的,快速的知足权限的需求,因此通常在作项目的时候,Shiro都会成为开发者的首选。github

但是,若是你须要作第二个,第三个,第n个应用,一样须要相同的认证、受权时,可能就须要对Shiro进行必定的扩展或者是集成其它框架,才能很好的知足你的需求了。框架

Shiro是如何进行认证受权maven

Shiro自己并无帮你实现认证、受权,但Shiro很好的定义了权限相关的一些概念,让你完成具体的实现学习

  • 认证
    在Shiro里,完成认证通常是这样的subject.login(token),Subject表明一个用户,Token表明一个用户请求受权时提交的受权信息,经过AuthenticatingRealm.doGetAuthenticationInfo()获取到当前Subject的一些信息,好比Principals,Credentials,校验提交的token,若是登陆成功,保存当前登陆用户
  • 受权
    在Shiro里,权限控制通常是这样的@RequiresPermissions,当用户访问受保护资源的时候,Shiro会经过AuthorizingRealm.doGetAuthorizationInfo(),从当前认证经过Subject的Principals里获取用户的权限,判断用户是否能访问该资源

在Shiro里,经过实现Realm来完成上面2件事情,当你时单体应用的时候,很是简单就能完成应用的认证受权。ui

可是当你有多个应用,须要复用同一套用户以及权限信息时该怎么作呢,能够复用Realm,用户权限在同一个db中,这样的话是能够实现的,可是耦合过高,不一样的应用必需要接入同一个数据源才行;或者能够把用户权限相关的DAO剥离出来,做为RPC或Rest调用,也能够实现;可是更好的方式是把认证受权整个剥离出来,单独做为认证受权服务spa

基于Shiro的统一认证受权code

为了实现统一认证受权,Shiro有CasFilter,能够集成CAS,可是CAS又是另一套框架,较为重,有单独的学习成本,因此这里介绍一种更简单,轻量,易用的,基于Shiro的认证受权服务shiro-uaaserver

认证受权流程blog

  1. 用户请求受保护资源Resource Server
  2. Resource Server判断用户是否已经登陆
  3. 若是没有登陆,Resource Server引导用户到UAA Server进行登陆
  4. 用户在UAA Server登陆,若是登陆成功,UAA Server返回code给用户,并引导用户到以前访问的Resource Server
  5. Resource Server用code到UAA Server获取access-token,token包含用户受权信息
  6. Resource Server验证accessToken是否合法,若是合法,在Resource Server保存用户信息

以下图:

map

使用

  • auth-server

    1. 引用maven
    2. 实现本身的登陆
  • resource-server

    1. 引用maven
    2. 和shiro同样,使用相关注解进行权限控制

基本上开箱即用,目前auth-server只是做为jar包提供,须要本身实现登陆逻辑,后续会有可部署服务

shiro-uaa具体的相关说明介绍能够查看项目地址

相关文章
相关标签/搜索