如何将 Oauth2.0 合并到现有的 Java Spring Web MVC 和 REST 项目中?

Posted

技术标签:

【中文标题】如何将 Oauth2.0 合并到现有的 Java Spring Web MVC 和 REST 项目中?【英文标题】:How to incorporate Oauth2.0 in existing Java Spring web MVC and REST project? 【发布时间】:2021-09-10 22:01:39 【问题描述】:

我有一个以 Java 作为后端(spring web MVC jars + REST jars)的动态 Web 应用程序,由一个身份验证 Servlet 和一个控制器 servlet 控制,用于应用程序中的其他功能。 它具有 java 脚本和 html 作为前端。 该项目有 WebContent 文件夹,其中包含 rest-servlet.xml 和 web.xml 以及其他前端文件。

现在我需要实现 Oauth2.0 来替换 Authentication Servlet 中的 SSO。在下面的代码中,我应该使用来自 OAuth2.0 流程实现代码的 JSON 响应,而不是从标头获取详细信息。

@Override
public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException

String digest  = req.getHeader("Authorization");//need to remove this

//Pull PXED headers
String id = req.getHeader("IAMUSERID"); //need to remove this
String firstName = req.getHeader("IAMUSERFIRSTNAME"); //need to remove this
String lastName = req.getHeader("IAMUSERLASTNAME");//need to remove this
String groups = req.getHeader("IAMUSERGROUPMEMBERSHIP");//need to remove this



现在 PXED 团队为我提供了在 POSTMAN 中获取此 JSON 响应的步骤。他们提供的步骤:

    将授权类型设置为授权码 将授权类型设置为 Oauth2.0 设置回调网址(这是我应用的开发网址) 设置授权网址由 PXED 团队提供 设置 PXED 团队提供的 Token URL 设置 PXED 团队提供的 Client ID - APP_client 设置 Client Secret 由 PXED 团队提供 点击“获取新的访问令牌” 复制令牌并将此令牌粘贴到另一个长 URL 的末尾 将 POST 设置为最后一步 URL 的 HTTP 方法,并将授权类型更改为 Basic Auth. 设置 PXED 团队提供的用户名和密码 - APP_validate & password 发送请求 收到包含所有详细信息的 JSON 响应。

到目前为止,我已经探索并失败了:

    Spring Boot Security(我无法实现,因为我无法更改架构) Nimbus OAuth 2.0 SDK 与 OpenID 连接:https://connect2id.com/products/nimbus-oauth-openid-connect-sdk/examples/oauth/token-request Apache OLTU(已退役,但我仍然无法在对象中设置正确的详细信息):https://oltu.apache.org/apidocs/oauth2/reference/org/apache/oltu/oauth2/client/package-summary.html

我只需要在后端实现此代码。 请帮助我使用正确且安全的库来实施 OAuth2.0。 另外,如果您熟悉NIMBUS OAUTH 2.0 SDK,能否帮我在正确的类中设置步骤中的细节?

【问题讨论】:

【参考方案1】:

一种选择是为您使用gateway to handle the OAuth dance,然后您的应用程序只需要验证访问令牌(OAuth 术语中的“资源服务器”)。

链接的帖子使用 Spring Cloud Gateway,但其他网关/代理的工作方式相同。 (这篇文章还使用了一个 servlet 过滤器,可以通过您使用的框架进行简化)。

【讨论】:

以上是关于如何将 Oauth2.0 合并到现有的 Java Spring Web MVC 和 REST 项目中?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIView 添加到现有的 UIViewController

如何附加到现有的 java.io.ObjectStream? [复制]

如何将 JPA 添加到现有的 Eclipse 项目?

如何在angularjs中合并两个对象数组?

如何将多维数组添加到现有的 Spark DataFrame

如何将 Mailchimp 添加到现有的注册框