OAuth2通过token访问资源服务器

朱雀 2024-04-18 16:39 119阅读 0赞

学习地址:

https://www.majiaxueyuan.com/uc/play/65

Oauth2.0的一些简单介绍:

https://blog.csdn.net/qq\_28198181/article/details/100523474


目录

1.创建资源服务器

2.启动权限服务器和资源服务器并访问路径


1.创建资源服务器

要访问资源服务器受保护的资源需要携带令牌(从授权服务器获得)

客户端往往同时也是一个资源服务器,各个服务之间的通信(访问需要权限的资源)时需携带访问令牌

资源服务器通过 @EnableResourceServer 注解来开启一个 OAuth2AuthenticationProcessingFilter 类型的过滤器

通过继承 ResourceServerConfigurerAdapter 类来配置资源服务器

就是需要新建立一个资源服务器 resourceserver

1.需要的maven

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.0.1.RELEASE</version>
  5. </parent>
  6. <!-- 管理依赖 -->
  7. <dependencyManagement>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-dependencies</artifactId>
  12. <version>Finchley.M7</version>
  13. <type>pom</type>
  14. <scope>import</scope>
  15. </dependency>
  16. </dependencies>
  17. </dependencyManagement>
  18. <dependencies>
  19. <!-- SpringBoot整合Web组件 -->
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.projectlombok</groupId>
  26. <artifactId>lombok</artifactId>
  27. </dependency>
  28. <!-- springboot整合freemarker -->
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-freemarker</artifactId>
  32. </dependency>
  33. <!-->spring-boot 整合security -->
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-security</artifactId>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.cloud</groupId>
  40. <artifactId>spring-cloud-starter-oauth2</artifactId>
  41. </dependency>
  42. </dependencies>
  43. <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
  44. <repositories>
  45. <repository>
  46. <id>spring-milestones</id>
  47. <name>Spring Milestones</name>
  48. <url>https://repo.spring.io/libs-milestone</url>
  49. <snapshots>
  50. <enabled>false</enabled>
  51. </snapshots>
  52. </repository>
  53. </repositories>

2.application.properties配置信息

配置需要通过返回到authServer认证服务的路径去

  1. server.port=8081
  2. logging.level.org.springframework.security=DEBUG
  3. security.oauth2.resource.tokenInfoUri=http://localhost:8080/oauth/check_token
  4. security.oauth2.resource.preferTokenInfo=true
  5. ####从认证授权中心上验证token
  6. security.oauth2.client.accessTokenUri=http://localhost:8080/oauth/token
  7. security.oauth2.client.userAuthorizationUri=http://localhost:8080/oauth/authorize
  8. ###appid
  9. security.oauth2.client.clientId=yyy_client(这个是自己配置的)
  10. ###appSecret
  11. security.oauth2.client.clientSecret=yyy_secret(这个是自己配置的)

3.资源拦截配置

用于拦截请求,通过验证的才能进行访问资源。

  1. @Configuration
  2. @EnableResourceServer
  3. public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
  4. @Override
  5. public void configure(HttpSecurity http) throws Exception {
  6. // 对 api/user 请求进行拦截
  7. http.authorizeRequests().antMatchers("/api/user/**").authenticated();
  8. }
  9. }

4.资源服务请求

正常的一个请求方式

  1. @RestController
  2. @RequestMapping("/api/user")
  3. public class UserController {
  4. @RequestMapping("/addUser")
  5. public String addUser() {
  6. return "addUser!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
  7. }
  8. }

5.启动类添加注解

使用注解

  1. @SpringBootApplication
  2. @EnableOAuth2Sso
  3. public class ResourceServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ResourceServerApplication.class, args);
  6. }
  7. }

2.启动权限服务器和资源服务器并访问路径

启动,如果直接访问会报错没有权限,

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70

需要通过得到访问权限才能得到。这个时候需要通过postman的方式获取数据

通过password模式获取(数据放在body通过post方式发送)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 1

能够获取到token

20190910110140784.png

也可以通过其他模式,比如验证码模式,通过回调获取code

  1. http://localhost:8080/oauth/authorize?response_type=code&client_id=yyy_client&redirect_uri=http://www.4399.com

20190910112857596.png

访问token路径

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 2

获得code

2019091011310951.png

然后通过路径资源请求访问,header里面携带token码

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MTk4MTgx_size_16_color_FFFFFF_t_70 3

以上

发表评论

表情:
评论列表 (有 0 条评论,119人围观)

还没有评论,来说两句吧...

相关阅读