帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
Spring Security 自定义资源服务器实践
发布时间:2024-03-06 23:33:10   分类:帮助文档
Spring Security 自定义资源服务器实践 相关文章: OAuth2的定义和运行流程Spring Security OAuth实现Gitee快捷登录Spring Security OAuth实现GitHub快捷登录Spring Security的过滤器链机制Spring Security OAuth Client配置加载源码分析Spring Security内置过滤器详解为什么加载了两个OAuth2AuthorizationRequestRedirectFilter分析Spring Security 自定义授权服务器实践 前言 在前面我们使用最小化配置的方式搭建了自己的授权服务器,现在我们依旧用最小化的方式配置自己的资源服务器。 资源服务器负责scope的鉴权、authorities的鉴权、基于用户角色的鉴权等。 最小化配置 安装资源服务器 1、 新建一个Spring Boot项目,命名为spring-security-resource-server 2、引入pom.xml依赖 org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-oauth2-resource-server org.springframework.boot spring-boot-starter-web 其中与授权服务器依赖不同的是,资源服务器有spring boot版本,版本号会有spring boot进行管理,不需要显示声明。 配置资源服务器 1、配置application.yml 文件 spring: security: oauth2: resourceserver: jwt: issuer-uri: http://localhost:9000 该配置用于指定授权服务器地址,资源服务器将从该地址获取JWT令牌,并根据JWT中的属性进一步自我配置,发现授权服务器的公钥、验证JWT令牌。 2、创建配置类 @EnableWebSecurity(debug = true) public class ResoruceServerConfig { @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .mvcMatchers("/userinfo/").hasAuthority("SCOPE_userinfo") .and() .oauth2ResourceServer() .jwt(); return http.build(); } } .mvcMatchers("/userinfo/").hasAuthority("SCOPE_userinfo")匹配/userinfo/地址,允许访问范围是SCOPE_userinfo oauth2ResourceServer()定义为资源服务器 jwt()使用JWT令牌 3、 创建一个资源接口 /userinfo/用来获取资源所有者基本信息 @Data public class UserInfoRes { private String username; } 创建Rest接口 @RestController public class UserInfoController { @GetMapping("/userinfo") public UserInfoRes getUserInfo() { UserInfoRes userInfoRes = new UserInfoRes(); userInfoRes.setUsername("阿提说说"); return userInfoRes; } } 配置客户端 目前我们客户端的配置是这样的: spring: security: oauth2: client: registration: gitee: client-id: gitee_clientId client-secret: gitee_secret authorization-grant-type: authorization_code redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}' client-name: Gitee github: client-id: github_clientId client-secret: github_secret # 自定义 customize: client-id: testClientId client-secret: testClientSecret authorization-grant-type: authorization_code redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}' client-name: Customize scope: - userinfo provider: gitee: authorization-uri: https://gitee.com/oauth/authorize token-uri: https://gitee.com/oauth/token user-info-uri: https://gitee.com/api/v5/user user-name-attribute: name # 自定义 customize: authorization-uri: http://localhost:9000/oauth2/authorize token-uri: http://localhost:9000/oauth2/token user-info-uri: http://localhost:9000/userinfo user-name-attribute: username 这里我们只需要修改customize部分的user-info-uri和 user-name-attribute 调整后配置如下,其他部分跟原来是一样的。 customize: authorization-uri: http://localhost:9000/oauth2/authorize token-uri: http://localhost:9000/oauth2/token user-info-uri: http://localhost:8090/userinfo user-name-attribute: username ❗ user-name-attribute的名字,必须在user-info-uri返回的属性名中存在 整流程体验 在如上三部分配置完成后,就可以体验了,启动spring-security-resource-server、spring-security-authorization-server、spring-security-oauth2-client 浏览器访问地址:http://127.0.0.1:8080/hello,在授权完成后,即跳转回并显示结果。 ResourceServer下能看到带着token的/userinfo请求日志。 Request received for GET '/userinfo': org.apache.catalina.connector.RequestFacade@3418bfc9 servletPath:/userinfo pathInfo:null headers: accept: application/json authorization: Bearer eyJraWQiOiI5YjZjZWMzNi05ZDYyLTRkMWMtOWRiNi0wMWM1ODQzMDc1N2UiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiYXVkIjoidGVzdENsaWVudElkIiwibmJmIjoxNjYwOTU1ODQyLCJzY29wZSI6WyJ1c2VyaW5mbyJdLCJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6OTAwMCIsImV4cCI6MTY2MDk1NjE0MiwiaWF0IjoxNjYwOTU1ODQyfQ.gVWwwfzB-xNuWWUBpgGokIOy5xwV9Wkd05k3rqpk1h92b-TWENB4ZArEL--zpngSyE8iuml0vG3veCv647FDx_EY56ClM-UxH-3Wq0D2f3b6WTgFO5RpCCwRLCHahBlV5g9plr7hWYY5uX2cQ4MsC4-ltZSR6wga5LSLDB-bIK46ZmJ3DOaQFwTTCpWB4OgOuq1j59i9XkgDUc_I8WUsHB4eEDEbBJeOmdimDn5O1Ux6nDhPgLMLcpnrt3lHLmXDTk8Q7hX7YBynO2VBm6wkTeYP4a2rfinfhW-LtF1o3hm8QAY0hn1QKSEeWU5K5qiIOVeSJ5FqrYJ_VQPadT1qAQ user-agent: Java/11 host: localhost:8090 connection: keep-alive Security filter chain: [ DisableEncodeUrlFilter WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter CsrfFilter LogoutFilter BearerTokenAuthenticationFilter RequestCacheAwareFilter SecurityContextHolderAwareRequestFilter AnonymousAuthenticationFilter SessionManagementFilter ExceptionTranslationFilter FilterSecurityInterceptor ] 总结 到此,我们通过自己搭建的授权服务器和资源服务器,完整体验了OAuth2流程,再来体会下第一篇文章中说明的交互流程。 在整个流程中,我们使用的是最严密的授权码模式,它将用户引导到授权服务器进行身份验证,授权服务器将发放的访问令牌传递给客户端,目前主流都是使用该模式,因此特别重要,要好好体会。 源代码地址:https://github.com/jujunchen/21Study
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价