OAuth2.0最直观配置

本文介绍了OAuth2.0的基础,并详细阐述了在Spring框架下如何配置OAuth2.0,包括表结构设计、数据结构、加密方式、自定义授权服务器和资源服务器配置,以及Redis中token的存储和反序列化过程。
摘要由CSDN通过智能技术生成

OAuth2.0基础认识可以看这里

spring全家桶已经实现了OAuth2.0的全部功能(spring-cloud-starter-security、spring-security-oauth2-autoconfigure),我们只要引用对应库就可以了。

表结构

无论哪种认证方式,总要把数据存储起来(无论是在缓存还是DB),OAuth2.0依赖的数据一般是存放在DB中的,全部表结构可以参考这里

其中不能省的表就这一个:oauth_client_details(客户端信息配置,当然了表名可以自己随便改)

字段
client_id 客户端唯一标识,有的场景叫AppKey,一个东西
resource_ids 客户端能访问的资源ID集合,一般不用
client_secret 客户端秘钥,这个很重要,不能泄露;有的场景叫AppSecret
scope 客户端申请的权限范围,完全自定义的字符串
authorized_grant_types OAuth2.0支持的授权类型,可选值包括 authorization_code,password,refresh_token,implicit,client_credentials,支持多个 grant_type 用英文逗号分隔
web_server_redirect_uri 客户端的重定向URI, 可为空。用来验证发起请求的参数与数据库中的配置是否一致
authorities 客户端所拥有的 Spring Security 的权限,一般不用
access_token_validity 客户端的 access_token 的有效时间值 (单位:秒), 可选,若不设定值则使用默认的有效时间值 (60 * 60 * 12, 12 小时)
refresh_token_validity 客户端的 refresh_token 的有效时间值 (单位:秒), 可选,若不设定值则使用默认的有效时间值 (60 * 60 * 24 * 30, 30 天)
additional_information 预留的字段,在 Oauth 的流程中没有实际的使用
autoapprove 是否自动 Approval 操作,默认值为 false。只适用于 grant_type=“authorization_code” 的情况,当用户登录成功后,若该值为 true 或支持的 scope 值,则会跳过用户 Approve 的页面,直接授权

其它用户表、角色权限表、token存储表等等都可以用我们自己的业务表来做,token可以存放在redis中。

数据结构

用户信息

org.springframework.security.core.userdetails.User

private String password;
private final String username;
private final Set<GrantedAuthority> authorities;
private final boolean accountNonExpired;
private final boolean accountNonLocked;
private final boolean credentialsNonExpired;
private final boolean enabled;

这个类可以自定义,继承User就好了,一般都是用项目中的用户类。

权限信息

可以是菜单权限,也可以数据权限,这个完全根据业务来自定义。

比如使用业务系统的角色+权限关系表,就可以知道当前用户能操作哪些菜单/数据(Set authorities)。

加密方式(针对password模式)

认证过程中提交的密码不能是明文,如果不用默认的加密方式,可以自定义(必须与数据库中存储密码的加密方式匹配)。

@Bean
public PasswordEncoder passwordEncoder() {
   
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

自定义授权服务器配置

@Configuration
@AllArgsConstructor
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
   
	private final DataSource data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值