如何将 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