Spring Boot 整合 OAuth2.0基础知识

一、oauth中的角色

client:使用API的客户端(如Android 、IOS、web app)

OAuth2.0 Provider

  • Authorization Server:认证服务器,进行认证和授权
  • Resource Server:资源服务器,被授权访问的资源

Resource Owner:用户

二、Authorization Server

一般情况下,创建两个配置类,一个继承AuthorizationServerConfigurerAdapter,一个继承WebSecurityConfigurerAdapter,再去复写里面的方法。

@EnableAuthorizationServer:

声明一个认证服务器,当使用此注解后,应用启动后将自动生成几个Endpoint。(注:其实实现一个认证服务器就是这么简单,加一个注解就搞定,当然要真正用到生产环境还是需要进行一些配置和复写工作的。)

  • /oauth/authorize:验证
  • /oauth/token:获取token
  • /oauth/confirm_access:用户授权
  • /oauth/error:认证失败
  • /oauth/check_token:资源服务器用来校验token
  • /oauth/token_key:如果jwt模式则可以用此来从认证服务器获取公钥

以上这些endpoint都在源码里的endpoint包里面。

继承AuthorizationServerConfigurerAdapter:

AuthorizationServerConfigurerAdapter实现了AuthorizationServerConfigurer。AuthorizationServerConfigurer包含三种配置:ClientDetailsServiceConfigurer、AuthorizationServerSecurityConfigurer、AuthorizationServerEndpointsConfigurer。

1、ClientDetailsServiceConfigurer

client客户端信息的读取及配置,这里的实现有多种:in-memory、JdbcClientDetailsService、jwt等。

client信息包括:clientId、secret、scope、authorizedGrantTypes、authorities。

scope:表示权限范围,可选项,用户授权页面时进行选择

Authorities:授予client的权限

authorizedGrantTypes:四种授权方式

  • Authorization Code:用在服务端应用之间
  • Implicit:用在移动app或者web app(这些app是在用户的设备上的,如在手机上调起微信来进行认证授权)
  • Client Credentials:用在应用API访问。
  • Resource Owner Password Credentials:应用直接都是受信任的(都是由一家公司开发的)

此处scopes和authorities的区别:

  • scopes是client权限,至少授予一个scope的权限,否则报错。
  • authorities是用户权限

client信息读取:调用JdbcClientDetailsService,此处需要传入响应的DataSource。

2、AuthorizationServerSecurityConfigurer

声明安全约束,哪些允许访问,哪些不允许访问

3、AuthorizationServerEndpointsConfigurer

声明授权和token的端点以及token的服务的一些配置信息,比如采用什么存储方式、token有效期等等。

授权类型:默认情况下,支持除了密码外的所有授权类型,相关授权类型的一些类;

(1)authenticationManager:直接注入一个AuthenticationManager,自动开启密码授权类型

(2)userDetailsService:如果注入UserDetailsService,那么将会自动刷新token授权类型,会判断用户是否还是存活的

(3)authorizationCodeServices:AuthorizationCodeServices的实例,auth code 授权类型的服务

(4)implicitGrantService:imlpicit grant

(5)tokenGranter:

endpoint的URL的配置:
(1)AuthorizationServerEndpointsConfigurer的pathMapping()方法,有两个参数,第一个是默认的URL路径,第二个是自定义的路径

(2)WebSecurityConfigurer的实例,可以配置哪些路径不需要保护,哪些需要保护。默认全都保护。

4、如何管理Token

AuthorizationServerTokenServices:声明必要的关于token的操作

  • 当token创建后,保存起来,以便之后的接受访问令牌的资源可以引用它。
  • 访问令牌用来加载认证。

接口的实现有很多种,DefaultTokenServices是其默认实现,它使用了默认的InMemoryTokenStore,不会持久化token。

token的存储方式有三种:

  • InMemoryTokenStore:存放于内存中,不会持久化
  • JdbcTokenStore:存放数据库中
  • JWT:json web token

三、Resource Server:保护资源,需要令牌才能访问

在配置类上加上注解@EnableResourceServer即启动。使用ResourceServerConfigurer进行配置:

(1)tokenServices:ResourceServerTokenServices的实例,声明了token的服务

(2)resourceId:资源Id,由auth Server验证。

(3)其它一些扩展点,比如可以从请求中提取token的tokenExtractor

(4)一些自定义的资源保护配置,通过HttpSecurity来设置

如何访问资源服务器中的API?

如果资源服务器和授权服务器在同一个应用程序中,并且您使用DefaultTokenServices,那么您不必太考虑这一点,因为它实现所有必要的接口,因此它是自动一致的。如果您的资源服务器是一个单独的应用程序,那么您必须确保您匹配授权服务器的功能,并提供知道如何正确解码令牌的ResourceServerTokenServices。与授权服务器一样,您可以经常使用DefaultTokenServices,并且选项大多通过TokenStore(后端存储或本地编码)表示。

(1)在校验request中的token时,使用RemoteTokenServices去调用AuthServer中的/auth/check_token。

(2)共享数据库,使用Jdbc存储和校验token,避免再去访问AuthServer。

(3)使用JWT签名的方式,资源服务器自己直接进行校验,不借助任何中间媒介。
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值