:完善环境配置)
文章目录环境配置创建表遇到的问题提示 Bad client credentials 认证错误本章代码已提交至Gitee: https://gitee.com/lengcz/distributed-security01.git环境配置目前客户端信息和授权码仍然存储在内存中生产环境中通过会存储在数据库中下面完善环境的配置创建表(1) 创建表DROPTABLEIFEXISTSoauth_client_details;CREATETABLEoauth_client_details(client_idvarchar(255)NOTNULL,resource_idsvarchar(255)DEFAULTNULL,client_secretvarchar(255)DEFAULTNULL,scopevarchar(255)DEFAULTNULL,authorized_grant_typesvarchar(255)DEFAULTNULL,web_server_redirect_urivarchar(255)DEFAULTNULL,authoritiesvarchar(255)DEFAULTNULL,access_token_validityint(11)DEFAULTNULL,refresh_token_validityint(11)DEFAULTNULL,additional_informationvarchar(255)DEFAULTNULL,create_timetimestampNULLDEFAULTNULLONUPDATECURRENT_TIMESTAMP,archivedtinyint(4)DEFAULTNULL,trustedtinyint(4)DEFAULTNULL,autoapprovevarchar(255)DEFAULTNULL,PRIMARYKEY(client_id))ENGINEInnoDBDEFAULTCHARSETutf8;-- ------------------------------ Records of oauth_client_details-- ----------------------------INSERTINTOoauth_client_detailsVALUES(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);DROPTABLEIFEXISTSoauth_code;CREATETABLEoauth_code(create_timetimestampNOTNULLDEFAULTCURRENT_TIMESTAMP,codevarchar(255)NOTNULL,authenticationblobNOTNULL,PRIMARYKEY(code))ENGINEInnoDBDEFAULTCHARSETutf8;(2)修改UAA的AuthorizationServer引入passwordEncoder增加clientDetailsServiceAutowiredprivatePasswordEncoderpasswordEncoder;BeanpublicClientDetailsServiceclientDetailsService(DataSourcedataSource){ClientDetailsServiceclientDetailsServicenewJdbcClientDetailsService(dataSource);//配置数据源((JdbcClientDetailsService)clientDetailsService).setPasswordEncoder(passwordEncoder);//配置密码器returnclientDetailsService;}3 使用clientDetailsServicepublicvoidconfigure(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_idc1response_typecodescopeROLE_ADMINredirect_urihttps://www.baidu.com打开链接登录后提示授权选择Approve 并点击按钮。然后查看oauth_code表发现这个授权码存在数据库中。遇到的问题提示 Bad client credentials 认证错误请检查 BCrypt格式的密码是否正确booleaneqBCrypt.checkpw(明文,密文);//BCrypt比较System.out.println(BCrypt.hashpw(secret,BCrypt.gensalt()));//加密