OAuth2角色
(1)resource owner
能够准许访问受保护资源的实体,当资源的所有者是一个人,它被称为终端用户。
(2)resource server
服务器托管受保护的资源,能够接受和响应使用访问令牌保护资源的请求。
(3)client
(4)authorization server
服务器在成功认证后,发出访问令牌给客户端。
OAuth2授权方式
我们的保护资源必须通过授权得到令牌才可以访问,那么这个授权令牌的获取方式有:
(1)授权码模式(authorization code)
相对于其他三种来说是功能比较完整、流程最安全严谨的授权方式。通过客户端的后台服务器与服务提供商的认证服务器交互来完成。
一个授权码的获取是OAuth客户端跳转到一个授权页面,然后通过验证授权之后服务器重定向到OAuth客户端,并且在重定向连接中附带返回一个授权码。
(2)简化模式(implicit)
这种模式不通过服务器程序来完成,直接由浏览器发送请求获取令牌,令牌完全暴露在浏览器中,这种模式极力不推崇。
(3)密码模式(resource owner password credentials)
密码模式也是比较常用的一种,客户端向授权服务器提供用户名、密码然后得到授权令牌。这种模式不过有种弊端,我们的客户端城要存储用户输入的密码。
(4)客户端模式(client credentials)
是客户端以自己的名义去授权服务器申请授权令牌,并不是完全意义上的授权。
配置可以通过继承AuthorizationServerConfigurerAdpater。
OAuth2令牌
(1)Access Token:发送的每个请求,有效期一般是一个很短的时间(例如一个小时)
(2)Refresh Token:主要用于获取新的访问令牌,而不是每个请求都发送,通常比访问令牌生命更长。
下面是配置一个授权服务必须要实现的endpoints:
(1)AuthorizationEndpoint:用来作为请求者获取授权服务,默认的URL是/oauth/authorize
(2)TokenEndpoint:用来作为请求者获得令牌的服务,默认的URL是/oauth/token
下面是配置一个资源服务必须要实现的过滤器:
OAuth2AuthenticationProcessingFilter,用来作为认证令牌的一个处理流程过滤器,只有当过滤器通过之后,请求者才能获得保护的资源。
管理令牌
(1)当一个令牌被创建了,你必须对其进行保存,这样当一个客户端使用这个令牌对资源进行请求的时候才能够引用这个令牌。
(2)当一个令牌是有效的时候,它可以被用来加载身份信息,里面包含了这个令牌的相关权限。
当你自己创建AuthorizationServerTokenServices这个接口实现时,你可能需要考虑一下使用DefaultTokenServices这个类,里机包含了一些有用的实现,你可以使用它来修改令牌的格式和令牌的存储。默认的,当它尝试创建一个令牌的时候,是使用随机值来进行填充的,除了持久化令牌是委托一个TokenStore接口来实现以外,这个类几乎帮你做了所有的事情。ToekStore接口实现:
(1)InMemoryTokenStore
这个实现是默认采用的。
(2)JdbcTokenStore
这是一个基于JDBC的实现版本,令牌会被保存进关系型数据库,使用这个版本的实现时,你可以在不同的服务器之间共享令牌信息。
(3)JwtTokenStore
这个版本的全称是JSON Web Token(JWT),
最后欢迎大家访问我的个人网站:1024s