将 OAuth2AuthorizedClient 解析为 Spring bean

2024-01-04

我有一个自动连接许多服务的控制器。这些服务是 HTTP Restful 调用,从各种数据源检索数据,但这些服务受 OAuth2.0 保护。

我正在尝试使用 Spring Security 来实现客户端凭据流,该流将允许这些服务安全地从这些受保护的数据源检索数据,但在解析服务层的 OAuth2AuthorizedClient 数据对象时遇到一些困难。

我一直在尝试通过以下方式解决授权客户的问题@RegisteredOAuth2AuthorizedClient https://docs.spring.io/spring-security/site/docs/current/reference/html5/#webflux-roac注解:

public void setAuthorizedClient(
      @RegisteredOAuth2AuthorizedClient("azure") OAuth2AuthorizedClient authorizedClient) {

    ClientRegistration clientRegistration =
        this.clientRegistrationRepository.findByRegistrationId("azure");
    System.out.println(clientRegistration);

    OAuth2AccessToken accessToken = authorizedClient.getAccessToken();

    jwtToken = accessToken.getTokenValue();
  }

是否可以解决OAuth2授权客户端 https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2Client-authorized-client作为一个 Spring bean,然后可以注入到另一个 bean 中?
或者有更好的方法来构建这样的系统吗?

Thanks!


这是一个老问题,但我刚刚为自己解决了这个问题,所以这里是:

您可以创建一个为您返回 OAuth2AuthorizedClient 的 @Component,并将其注入到您需要的地方。这是一个示例方法:

  1. 创建一个提供者组件类
  2. 将现成的 OAuth2AuthorizedClientService bean 注入到您的类中
  3. 创建一个使用该服务的方法以返回 OAuth2AuthorizedClient
  4. 将您的提供者类注入到您的控制器中

Example:

@Component
public class OAuth2AuthorizedClientProvider {
  
  @Autowired
  private OAuth2AuthorizedClientService clientService;

  public OAuth2AuthorizedClient getClient() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
    return clientService.loadAuthorizedClient(oauthToken.getAuthorizedClientRegistrationId(), oauthToken.getName());
  }

然后在控制器中使用 OAuth2AuthorizedClientProvider,如下所示:

@RestController
public class Endpoint {

  @Autowired
  private final OAuth2AuthorizedClientProvider oauth2AuthorizedClientProvider;

  @GetMapping("/mymethod")
  public String mymethod() {

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

将 OAuth2AuthorizedClient 解析为 Spring bean 的相关文章

随机推荐

  • 如何获取自己的地址?

    我怎样才能做到这一点 cdef class Tree cdef object key cdef Tree left cdef Tree right cdef PyObject find self key get the address of
  • 根据 stackoverflow 中的问题重新创建 pandas 数据框

    这是一个试图回答有关 pandas 数据框问题的人提出的问题 考虑一个给定数据集的问题 该数据集只是可视化 而不是实际的代码 例如 numbers letters dates all 0 1 a 20 10 2020 NaN 1 2 b 2
  • 分析 Netty 性能

    我正在编写一个 Netty 应用程序 该应用程序在 64 位八核 Linux 机器上运行 Netty 应用程序是一个简单的路由器 它接受请求 传入管道 从请求中读取一些元数据并将数据转发到远程服务 传出管道 该远程服务将向传出管道返回一个或
  • Net Core IWebHostEnvironment 仅获取“c:\”

    我正在尝试将应用程序从 net 移动到 net core 5 并且我正在尝试获取内容根目录 我看到的所有说明都显示在控制器中使用 IHostingEnvironment 然而 使用这个只是让我 c 我怀疑这是因为我试图使用它 不是在控制器中
  • SQL 查询返回包含最近日期等的重复项

    我有一个表 人 有很多列 我需要返回没有 重复 定义如下 的每个条目的完整行以及以下内容 找到该表中共享属性的条目 first name last name 和 work phone 这些是我的重复项 目的 并仅返回其 date modif
  • AttributeError:“历史”对象没有属性“预测” - 拟合训练和测试数据列表

    我正在尝试使用这个的神经网络模型example http machinelearningmastery com regression tutorial keras deep learning library python 我正在将值列表拟合
  • 同时解析 python 中的多个子命令或以其他方式对解析的参数进行分组

    我正在将 Bash shell 安装程序实用程序转换为 Python 2 7 并且需要实现复杂的 CLI 以便能够解析数十个参数 可能最多约 150 个 这些是 Puppet 类变量的名称以及十几个通用部署选项 在 shell 版本中可用
  • java本体论(jena)

    我正在做一些基于本体的项目 我想识别用户输入的文本的语义 有没有可能通过 jena 完成我处理本体的任务 Jena 不做自然语言处理 您想要查看类似的 APIZemanta http www zemanta com or 加来公开赛 htt
  • C++ 检查单例指针

    我有一个应用程序 它有一个 Qt C 单例记录器类 GetInstance 的实现是 if m Instance NULL try m Instance new Logger catch return m Instance 现在我在 h 文
  • 为什么我在 Terraform 中尝试 auto_accept vpc 对等互连时收到权限错误?

    我正在尝试在帐户之间创建 VPC 对等点并自动接受它 但失败并出现权限错误 这里有提供者 in the main tf provider aws region var region shared credentials file Users
  • MySQL 'select now()' 与 linux 'date' 不同步

    我希望有人可以快速解决这个问题 因为这是在我的生产服务器上 确实如标题所示 我以为 mysql 从安装它的机器上获取它的日期时间 好吧我错了 现在是下午 2 30 linux 说现在是下午 2 30 MySQL 说现在是上午 9 30 由于
  • 获取远程服务器环境变量

    问题 我们的 Cobol 应用程序在网络上的许多服务器 主要是服务器 2003 上运行 许多 如果不是全部 这些应用程序都使用环境变量进行设置 问题 您可以从一个工作站从远程已知服务器列表中收集环境变量的完整列表吗 最好我想在 Batch
  • 如何在自定义视图上显示数字键盘

    我创建了一个自定义视图 public class MyCustomView extends LinearLayout 当用户触摸它时 我显示键盘如下 Override public boolean onTouchEvent MotionEv
  • Visual C++ 到 Turbo C++

    您好 我已经用 Visual C 编写了一个程序 无论出于何种原因 现在我需要在 Turbo C 3 0 中运行 编译这个相同的程序 我已设法从某些来源获得编译器 但当我尝试编译代码时出现很多错误 我已经注释掉了 include stdaf
  • 使用 MediaCapture 从 CaptureElement 拍摄自定义分辨率的照片

    我正在使用 CaptureElement 在我的 Windows 应用商店应用程序中显示相机源 现在 我想在用户点击显示屏时以流的形式捕获照片 我使用下面的代码进行了工作 不幸的是 返回的图像分辨率仅为 640 x 360 但相机 Surf
  • 如何在Android中关闭系统对话框?

    我必须关闭这个系统Dialog 附在下面 我得到了这个值 但我无法在服务中而不是在活动中以编程方式关闭它 我的问题是 可以驳回吗 如果是 请帮助或指导我如何实现它 请检查一下 Override public void onWindowFoc
  • 找到与双打数组最接近的匹配

    鉴于下面的代码 如何将对象值列表与测试值进行比较 我正在构建一个地理定位应用程序 我将传递经度和纬度 并希望服务回复最接近这些值的位置 我开始沿着转换为字符串的路径 并将值格式化为小数点后两位 但这似乎有点太贫民窟 我正在寻找一种更优雅的解
  • 在 render_GET 或 render_POST 处理期间发布另一个 Web 查询

    我有一个使用 Twisted 编写的小型 Web 服务器 我想做的一件事是让它从另一个 Web 服务器返回结果作为加载页面的响应 也就是说 服务器 A 处对 render GET 的响应 通过http A com resource http
  • jQuery 文件上传不显示预览

    The jQuery 文件上传 http blueimp github com jQuery File Upload 插件当前不显示所选文件 有谁知道我该如何解决这个问题 我已经实现了 自定义 模板 见下文 注意我不需要显示以前上传的材料
  • 将 OAuth2AuthorizedClient 解析为 Spring bean

    我有一个自动连接许多服务的控制器 这些服务是 HTTP Restful 调用 从各种数据源检索数据 但这些服务受 OAuth2 0 保护 我正在尝试使用 Spring Security 来实现客户端凭据流 该流将允许这些服务安全地从这些受保