spring-boot oauth2 拆分授权服务器和资源服务器

2024-03-07

我试图在 spring-boot 中将资源服务器与授权服务器分开。我有两个单独运行的不同应用程序。在授权服务器中,我可以从 oauth/token 获取不记名令牌,但是当我尝试访问资源(在标头中发送令牌)时,我收到无效令牌错误。我的目的是使用 InMemoryTokenStore 和不记名令牌。谁能告诉我我的代码有什么问题吗?

授权服务器:

@SpringBootApplication
public class AuthorizationServer extends WebMvcConfigurerAdapter {

  public static void main(String[] args) {
    SpringApplication.run(AuthorizationServer.class, args);
  }

  @Configuration
  @EnableAuthorizationServer
  protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

  private TokenStore tokenStore = new InMemoryTokenStore();

  @Autowired
  private AuthenticationManager authenticationManager;

  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
      endpoints
        .authenticationManager(authenticationManager)
        .tokenStore(tokenStore);
  }

  @Override
  public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
      security.checkTokenAccess("hasAuthority('ROLE_USER')");
  }

  @Override
  public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
      clients
          .inMemory()
            .withClient("user")
            .secret("password")
            .authorities("ROLE_USER")
            .authorizedGrantTypes("password")
            .scopes("read", "write")
            .accessTokenValiditySeconds(1800);
  }  
}

资源服务器:

@SpringBootApplication 
@RestController
@EnableOAuth2Resource
@EnableWebSecurity
@Configuration
public class ResourceServer extends WebSecurityConfigurerAdapter {



public static void main(String[] args){
     SpringApplication.run(ResourceServer.class, args);
}

@RequestMapping("/")
public String home(){
    return "Hello Resource World!";
}

@Bean
public ResourceServerTokenServices tokenService() {
    RemoteTokenServices tokenServices = new RemoteTokenServices();
    tokenServices.setClientId("user");
    tokenServices.setClientSecret("password");
    tokenServices.setTokenName("tokenName");
    tokenServices.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token");
    return tokenServices;
}

@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    OAuth2AuthenticationManager authenticationManager = new OAuth2AuthenticationManager();
    authenticationManager.setTokenServices(tokenService());
    return authenticationManager;
}

@Configuration
@EnableResourceServer
protected static class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .requestMatchers()
            .antMatchers("/","/home")
            .and()
            .authorizeRequests()
            .anyRequest().access("#oauth2.hasScope('read')");
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        TokenStore tokenStore = new InMemoryTokenStore();
        resources.resourceId("Resource Server");
        resources.tokenStore(tokenStore);
    }
}

您已经创建了 2 个实例InMemoryTokenStore。如果您想在身份验证服务器和资源服务器之间共享令牌,它们需要相同的存储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring-boot oauth2 拆分授权服务器和资源服务器 的相关文章

随机推荐

  • Selenium IDE 和 xpath - 在表中查找文本/行并选择单选框

    我一直在使用 Selenium IDE 并取得了一些不错的结果 我已经阅读了很多有关跟随兄弟姐妹和先前兄弟姐妹的内容 但我找不到正确的单选按钮 本质上 我想在表中找到带有 测试 一词的行 然后单击单元格中的单选按钮 到目前为止我可以找到输入
  • 如何将逗号分隔的字符串转换为列表?

    Java 中是否有任何内置方法允许我们将逗号分隔的字符串转换为某个容器 例如数组 列表或向量 或者我需要为此编写自定义代码吗 String commaSeparated item1 item2 item3 List
  • 希伯来语问题 - MySql,c#

    我在将希伯来语字符串插入 MySql 时遇到问题 介绍 我将MySql设置为Utf8 我将表设置为字符集 utf8 排序规则为 uft8 general ci 我将连接字符串设置为 Server 数据库 Uid Pwd 字符集 utf8 我
  • 打包一个可运行的 JPA jar,将 persistence.xml 放在外面

    我想将我的 jpa swing 项目导出到可运行的 jar 中 但我希望 persistence xml 位于 jar 之外而不是打包在里面 这样我就可以更改它 而无需在每次配置后再次导出 jar 根据 JPA 规范 persistence
  • ios - 多个导航控制器之间的导航

    我试图理解使用 和不使用 NavigationController 在 ViewController 之间导航的行为 并且在阅读文章和文档时我误解了一些事情 所以我决定问他们 主要问题是 如果故事板中有多个导航控制器并且想要从一个导航控制器
  • cython 做了哪些 numpy 优化?

    我有点惊讶地发现 fast ops c pyx cimport cython cimport numpy as np cython boundscheck False turn off bounds checking for entire
  • C++ 打印指针的值

    我有一个双指针数组 但每次我尝试打印其中一个值时 都会打印地址 如何打印实际值 cout 有人知道吗 如果它确实是一个 初始化的 双指针数组 即 double arr Initialize individual values 所有你需要的是
  • UIDatePicker设置最小和最大小时

    如何设置 UIDatePicker 的最小和最大小时 到底有可能吗 我知道如何设置最小和最大日期 datePicker setMinimumDate 今天 datePicker setMaximumDate nextMonthDay 我想要
  • 如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍?

    我有一个查询 需要使用 ID 精确过滤 2 位作者 理论上 Book objects filter author id 1 author id 2 这是不可能的 我怎么解决这个问题 干杯 米奇 一开始并不直观 但答案就在我们面前 Book
  • knex.js 查询“承诺”何时执行/解析?

    对于正常的承诺 一旦当前代码停止 承诺就会尽快解决 考虑以下伪代码 const p SomePromiseDoingLoad calculatethings await sleepPromise during sleep the promi
  • VB:游戏之上的应用

    我想编写一个应用程序 在全屏游戏上绘制某个视觉对象 例如半透明三角形 该游戏具有 强置顶 属性 因为它涵盖了所有其他分类为 置顶 的应用程序 我需要我的应用程序是最上面的应用程序 并且始终处于焦点 而不影响后面游戏的顺利运行 如何才能有效地
  • 查找 Maven Google App Engine 项目的原型

    我正在使用 Eclipse 和 m2eclipse 插件为 Google App Engine 创建一个新的 Java 项目 创建新的 Maven 项目时 Eclipse 找不到原型 com google appengine archety
  • 由 javascript 更新的 asp.net mvc 禁用文本框不会发布新值

    我正在使用强类型模型来表达我的观点 我有一个禁用的文本框 我使用 javascript 更新其值 文本框是使用这个渲染的 这将呈现一个文本框 其中 NAME 和 ID 为 TotalAmount TotalAmount 也是我的模型上绑定到
  • cx_Freeze 后 Paramiko 无法正常工作?

    所以我编写了这段代码 我使用 Paramiko 通过 SSH 连接到计算机 脚本正常工作 但是当我使用 cx Freeze 将其转换为 exe 时 程序在 self ssh load system host keys 处停止工作 所以我从脚
  • 将表示列表的字符串转换为实际的列表对象[重复]

    这个问题在这里已经有答案了 我有一个代表列表的字符串 22 33 36 41 46 49 56 72 85 92 95 98 107 118 120 123 124 126 127 130 149 157 161 171 174 177 1
  • flutter中的webview是否缓存网页?

    我想缓存在 flutter webview 中显示的网页 以便提高性能 无需重新加载页面 可以用吗 我可以实施吗 flutter inappwebview 前 flutter inappbrowser 有参数cacheEnabled默认为
  • 如何从 Google Places API 获取地点描述

    我正在尝试使用 Google 地点 API 来获取某些地点的信息 我有一个 来自谷歌搜索的示例 这是我试图找到的 我认为 Places API 文本搜索的 类型 字段将包含它 但该文本似乎不同 并且不在提供的选项列表中 如果有人可以提供一些
  • .Net 中的 Oracle 连接池

    我们有一个使用 Oracle 数据库的系统 有人问我系统是否使用连接池 但我不确定 我们正在使用Oracle DataAccess Client OracleConnection 在阅读该主题时 我发现连接字符串中的连接池设置为 true
  • 在vagrant box上创建虚拟主机

    我正在尝试设置一个基于 Chef 提供的 vagrant 的开发环境 我使用 Apache 使用 Chef 创建了一个环境 并且可以通过端口转发从我的主机访问 Web 服务器 我想让我的流浪盒包含多个虚拟主机 并且通过共享文件夹 我将定义不
  • spring-boot oauth2 拆分授权服务器和资源服务器

    我试图在 spring boot 中将资源服务器与授权服务器分开 我有两个单独运行的不同应用程序 在授权服务器中 我可以从 oauth token 获取不记名令牌 但是当我尝试访问资源 在标头中发送令牌 时 我收到无效令牌错误 我的目的是使