=
springSecurity是springResource社区的一个安全组件,提供了细粒度的权限控制,可以精确到每一个业务的方法。提供的是应用程序层的安全解决方案。
OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用
(1) Third-party application:第三方应用程序,本文中又称"客户端"(client)
(2)HTTP service:HTTP服务提供商,本文中简称"服务提供商",
(3)Resource Owner:资源所有者,本文中又称"用户"(user)。
(4)User Agent:用户代理,本文中就是指浏览器。
(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
c步驟中
客户端发出的HTTP请求,包含以下参数:
- grant_type:表示授权类型,此处的值固定为"password",必选项。
- username:表示用户名,必选项。
- password:表示用户的密码,必选项。
- scope:表示权限范围,可选项。
更新令牌
如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌。
客户端发出更新令牌的HTTP请求,包含以下参数:
- granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
- refresh_token:表示早前收到的更新令牌,必选项。
- scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致
配置springSecurity
- 配置webSecurityConfigureAdapter
首先重写其中的configure(AuthenticationManagerBuilder auth)方法.这也就意味着应用的每一个请求都需要认证。自动生成了一个登陆表单等等安全防护工作。
其次重写其中的configure(httpSecurity http)方法,这里配置是否所有用户需要验证身份?那些资源需要验证。
配置OAuth2
- Authorization server的配置
在任何继承AuthorizationServerConfigureAdapter接口的类上加上@EnableAuthorizationServer注解开始授权服务功能。并实现下面三个配置
- ClientDetailsServiceConfigure:配置客户端信息
- AuthorizationServerEndopintsConfigure:配置授权Token的节点和Token服务
- AuthorizationServerSecurityConfiguree:配置Token节点的安全策略
2.ResourceServer的配置
ResourceServer提供了受保护的资源可以是api接口,也可以是页面等。在加了@configuration的注解上用@EnableResourceServer注解开启资源服务功能。如有必要可以配置以下内容。
- tokenService:如果授权服务和资源服务不在一个程序上则需要配置。配置token是如何编码解码的。也可以使用RemoteTokenService类即资源服务采用远程授权服务进行Token解码。这时也可不配置。
- resourceId:配置资源id
3.OAuth2Client