如何扩展 OAuth2 主体

2024-03-04

我们正在开发一个将 OAuth 2 用于两个用例的应用程序:

  1. 访问后端微服务(使用client_credentials)
  2. 验证应用程序的用户(使用authorization_code,因此将用户重定向到 Keycloak 进行登录,大致配置如下所示tutorial https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_manual).

在对用户进行身份验证时,我们从身份验证服务器接收部分信息(例如登录信息),另一部分可以在本地用户表中找到。我们想要做的是创建一个主体对象,其中还包含本地数据库中的数据。

主要提取器 https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/security/oauth2/resource/PrincipalExtractor.html似乎是要走的路 http://mmkay.pl/2017/03/19/spring-boot-saving-oauth2-login-data-in-db-using-principalextractor/。由于我们必须使用手动 OAuth 配置才能不干扰 OAuth 用例 1,因此我们创建它并设置它:

tokenServices.setPrincipalExtractor(ourPrincipalExtractor);

该实现基本上执行数据库查找并在映射函数中返回 CustomUser 对象。现在,虽然这似乎有效(调用提取器),但它没有正确地保留在会话中。因此,在我们的许多 REST 资源中,我们正在注入当前用户:

someRequestHandler(@AuthenticationPrincipal CustomUser activeUser) {

并在那里接收 null 。正在研究注射的Authentication它表明它是一个OAuth2身份验证 https://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/OAuth2Authentication.html对象与默认的主体对象(我认为它是一个SpringUser / UserDetails)。如此 null 因为它不是我们的CustomUser之前回来过。

我们是否误解了方法PrincipalExtractor作品?这是否是我们的过滤器链配置错误,因为我们在同一个应用程序中有两种不同的 OAuth 机制(如前面提到的)? Spring 的主要存储库中的断点向我们表明CustomUser保存在那里,然后使用原始类型保存,这似乎会覆盖它。


好吧,回答我自己的问题:

  1. PrincipalExtractor似乎是定制主体的常用和标准方法
  2. 它在我们的例子中不起作用,因为我们使用的是 JHipster 应用程序,它在登录后立即用它自己的应用程序覆盖主体User。所以所有映射都在PrincipalExtractor已重置。如果有人有同样的问题:看看UserService.

我猜这就是使用您不详细了解的生成代码的缺点。

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

如何扩展 OAuth2 主体 的相关文章

随机推荐

  • Delphi:通过一个套接字多线程发送数据

    有人可以告诉我如何通过多线程中的一个连接发送和接收数据吗 该模型如下所示 我所知道的是 如果所有三个客户端同时发送数据 客户端 X 将收到所有接收到的数据的合并 并且 客户端 X 无法分离该数据来识别哪一部分来自哪个客户端 德尔福2010
  • 如何在android中使用相机检查图像是在纵向模式还是横向模式下捕获的?

    我正在创建一个打开照片库的应用程序 通过从图库中选择该照片 照片将显示在另一个活动中 我的问题是 我以纵向模式拍摄的照片在显示后会旋转 但我在横向模式下拍摄的照片将正确显示 这就是为什么 我必须使用 Android 中的相机检查图像是在纵向
  • 运行 WHM 时如何以正确的方式添加虚拟主机?

    我正在运行一台专用服务器 为我的客户使用 WHM 和 CentOS 5 分隔帐户 我的一个客户要求我安装 subversion 并将存储库存储在 webroot 下 repo 的真实文件夹将位于 home theirfolder svn 中
  • 如果没有内容长度标头,HTTP 保持活动连接是否可行?

    据我了解 在 HTTP 1 0 中 通过关闭连接来终止响应的内容 https stackoverflow com questions 20763999 how does http keep alive work 在 HTTP 1 1 中 保
  • 将文件从 URL 上传到 Microsoft Azure Blob 存储

    从本地路径 从我的计算机 上传文件不是问题 但是 我没有找到如何从特定 URL 上传 如果可能的话 需要 Python 解决方案 仅本地文件有文档https learn microsoft com en us azure storage b
  • 使用 LINQ 访问表中第一个元素时出现 SQLite 错误

    使用 LINQ 访问 SQLite 数据库时遇到以下问题 缩写代码如下所示 using System Linq using System Data Linq using System Data Linq Mapping using Syst
  • Swift:通过在窗口中拖放打开文件

    在 Swift 中 如何在 Mac 应用程序的窗口中构建一个区域 用户可以将文件夹拖放到该区域 并让我的应用程序接收该文件夹的路径 原则上 在我看来 这与苹果的概念类似CocoaDragAndDrop 示例 https developer
  • 如何在 Scala 中比较两个对象是否相等?

    我在两个对象之间进行了非常基本的相等性检查 但它失败了 package foo import org junit Assert object Sandbox extends App class A val a new A val b new
  • 类型错误:“in ”需要字符串作为左操作数,而不是列表(函数)

    variableName display screen sound audio fileName PPP Abc P1 PPP d display s screen ss sound a audio d P1 loop True def C
  • 为什么我不能从下一个日期周期中减去一个日期周期并转换为整数?

    我试图确定两个月之间的差异是偶数还是奇数月份 我使用了命令 import pandas as pd pd to datetime 2019 01 01 to period M pd to datetime 2018 08 01 to per
  • 使用 xlrd 和 xlwt 编辑现有 Excel 工作簿和工作表

    In the 文档 http www simplistix co uk presentations python excel pdf for xlrd and xlwt我学到了以下内容 如何阅读现有的工作簿 工作表 from xlrd im
  • .gitattributes 在 Mac 和 Windows 上无法正常工作

    在我的项目中 我使用具有不同操作系统的计算机 一个是 Mac 第二个是 Windows 当我使用 git 时 每个更改都会显示为整个文档更改 原因是这两个操作系统中的行尾不同 我读了这个https help github com artic
  • 如何使用Struts 2和Hibernate维护会话?

    我需要知道如何维护一种形式和多种形式的会话input Name City Country 使用Struts2 最后数据将使用Hibernate存储到数据库 该表单有两个按钮 add 存储到会话 Submit 存储到数据库 首先 输入表格详细
  • GAE:memcache:在多个应用程序实例中是否相同

    我有一个非常基本的问题 在 GAE 中 如果我使用 memcache 来存储第一次从数据库检索到的一些数据 如果该数据在缓存中保留大约 2 天 那么所述应用程序的所有实例都会得到 查看 它并从缓存中检索它 或者每个应用程序实例的缓存是独立的
  • 滚动到模式窗口内的元素

    我有一个模式窗口 需要能够打开模式 然后将用户滚动到模式中的特定位置 我正在使用 AJAX 将模态内容获取到 PHP 脚本 例如 mypage php loc someid 在 PHP 脚本中 我有这个 JS 来执行滚动 document
  • URI 中的方案是可选的吗?

    最近 我被要求向网站添加一些 Woopra JavaScript 并注意到 URL 以双斜杠开头 即省略了方案 我以前从未见过这个 所以我试图了解更多信息 但我唯一能找到的是Woopra 常见问题解答中的一个项目 http www woop
  • Travis 无法构建 Android 项目,没有 local.properties

    事情是这样的 我已经在 Travis CI 上构建了我的项目好几次了 但每次都会遇到同样的问题 错误日志 What went wrong A problem occurred evaluating root project LiteRead
  • Eclipse 在 Ctrl-S 上跳转到函数名称

    当我按 Ctrl S 将 Java 文件保存在 Eclipse 中时 它会跳转到函数名称 这很烦人 有人知道该怎么办吗 转到 窗口 gt 首选项 gt 常规 gt 按键 您也可以搜索Keys在主首选项窗口中 您很可能添加了一个绑定 当您按下
  • 创建圆形鼠标悬停饱和效果

    我有两个版本的图像 去饱和版本和全彩版本 我想要实现的是悬停效果 其中将鼠标悬停在去饱和图像上会显示图像的彩色版本的圆圈 这有点像将聚光灯照射在饱和度降低的图像上以显示其颜色 然后 当您将鼠标移开时 它会淡回到不饱和状态 我知道我可能可以使
  • 如何扩展 OAuth2 主体

    我们正在开发一个将 OAuth 2 用于两个用例的应用程序 访问后端微服务 使用client credentials 验证应用程序的用户 使用authorization code 因此将用户重定向到 Keycloak 进行登录 大致配置如下