Spring Security OAuth2.0(20):完善环境配置
2026/7/13 14:01:07 网站建设 项目流程

文章目录

  • 环境配置
    • 创建表
  • 遇到的问题
    • 提示 Bad client credentials 认证错误

本章代码已提交至Gitee: https://gitee.com/lengcz/distributed-security01.git

环境配置

目前客户端信息和授权码仍然存储在内存中,生产环境中通过会存储在数据库中,下面完善环境的配置:

创建表

(1) 创建表

DROPTABLEIFEXISTS`oauth_client_details`;CREATETABLE`oauth_client_details`(`client_id`varchar(255)NOTNULL,`resource_ids`varchar(255)DEFAULTNULL,`client_secret`varchar(255)DEFAULTNULL,`scope`varchar(255)DEFAULTNULL,`authorized_grant_types`varchar(255)DEFAULTNULL,`web_server_redirect_uri`varchar(255)DEFAULTNULL,`authorities`varchar(255)DEFAULTNULL,`access_token_validity`int(11)DEFAULTNULL,`refresh_token_validity`int(11)DEFAULTNULL,`additional_information`varchar(255)DEFAULTNULL,`create_time`timestampNULLDEFAULTNULLONUPDATECURRENT_TIMESTAMP,`archived`tinyint(4)DEFAULTNULL,`trusted`tinyint(4)DEFAULTNULL,`autoapprove`varchar(255)DEFAULTNULL,PRIMARYKEY(`client_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;-- ------------------------------ Records of oauth_client_details-- ----------------------------INSERTINTO`oauth_client_details`VALUES('c1','res1','$2a$10$iL3DjyR4rTVdYwfp/jDtEurY7cLS7ZVZpShB72L5IFRkR/e9PiiWW','ROLE_ADMIN,ROLE_USER,ROLE_API','authorization_code,password,client_credentials,implicit,refresh_token','https://www.baidu.com/','ROLE_ADMIN,ROLE_USER,ROLE_API','7200','2592000',null,'2026-07-12 00:24:15','0','0','false');DROPTABLEIFEXISTS`oauth_code`;CREATETABLE`oauth_code`(`create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP,`code`varchar(255)NOTNULL,`authentication`blobNOTNULL,PRIMARYKEY(`code`))ENGINE=InnoDBDEFAULTCHARSET=utf8;

(2)修改UAA的AuthorizationServer,引入passwordEncoder,增加clientDetailsService

@AutowiredprivatePasswordEncoderpasswordEncoder;@BeanpublicClientDetailsServiceclientDetailsService(DataSourcedataSource){ClientDetailsServiceclientDetailsService=newJdbcClientDetailsService(dataSource);//配置数据源((JdbcClientDetailsService)clientDetailsService).setPasswordEncoder(passwordEncoder);//配置密码器returnclientDetailsService;}

(3) 使用clientDetailsService

publicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{clients.withClientDetails(clientDetailsService);//使用自己的service}

(4)原来授权码存储在内存中,现在将授权码存储到数据库中

// @Bean// public AuthorizationCodeServices authorizationCodeServices(){// return new InMemoryAuthorizationCodeServices();//设置授权码模式的使用(授权码存在内存中),// }@BeanpublicAuthorizationCodeServicesauthorizationCodeServices(DataSourcedataSource){returnnewJdbcAuthorizationCodeServices(dataSource);//设置授权码模式的使用(存储到数据库),}

(5) 启动UAA ,测试一下。
调用一下/uaa/oauth/token通过密码模式获取令牌

使用/uaa/oauth/check_token 查看令牌,校验令牌合法性。
比较内容是否和数据库一致

授权码测试,打开授权码的连接(注意配置的值需要和数据库中的值保持一致,或者在数据库中存在)

http://localhost:53020/uaa/oauth/authorize?client_id=c1&response_type=code&scope=ROLE_ADMIN&redirect_uri=https://www.baidu.com

打开链接,登录后,提示授权,选择Approve ,并点击按钮。

然后查看oauth_code表,发现这个授权码存在数据库中。

遇到的问题

提示 Bad client credentials 认证错误

请检查 BCrypt格式的密码是否正确

booleaneq=BCrypt.checkpw("明文","密文");//BCrypt比较
System.out.println(BCrypt.hashpw("secret",BCrypt.gensalt()));//加密

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询