gpt4 book ai didi

java - JSP 和 OAUTH2 身份验证

转载 作者:行者123 更新时间:2023-11-28 22:49:22 25 4
gpt4 key购买 nike

我希望这不是一个“太开放”的问题,但我真的不确定如何处理它。

我有一个用 Java JSP 编写的工作 Web 应用程序和一些与 Jersey 的 Rest 接口(interface),在 Tomcat 7 和 MySQL 数据库上运行。这是一个非常简单的基于表单的应用程序。目前我在 AWS 上运行它。

JSP 是这样的:

<%
String inmsg = request.getParameter("msg");
%>
<html>
<head>
...

Rest 类是这样的:

@Path("/operation")
public class IntrfcOperation {

String response="";
int retcode=0;
String id;
String name;

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response baserest(
@Context HttpServletRequest hsreq,
@Context HttpServletResponse hsresp)
{
response ="";
...
String outjson = "{\"retcode\":\"" + retcode + "\",\"name\":\"" + name + "\",\"msg\":\"" + response + "\"}";
return Response.status(200).entity(outjson).build();
}

我想合并一个身份验证层,并且我正在考虑使用 OpenID/Oauth2 服务器,可能是 AWS(IAM?)。我看到的问题是该协议(protocol)(据我所试)需要一个/唯一的重定向 url,这是发送到 Identity Manager 的每个请求的返回点。我的问题是我没有一个 URL,而是一堆 URL,每个 JSP 和 Rest 入口点一个。

转换它的正确方法应该是什么?我看到的唯一方法(现在不认为它是一个选项)是将整个应用程序重写为单个 JSP 脚本,其中所有不同的操作和页面都被标识为单个入口点的参数。还有其他更简单的方法吗?

最佳答案

OAuth2 要求您有一个 URI,该 URI 将接受来自身份验证服务器的重定向。整个应用程序只有一个 URI。处理此 URI 的代码应该从 URL 参数中获取值,保存 token (或从 /token 端点获取它们)并重定向到您已有的应用程序页面。

因此无需重写您的应用程序。例如,如果您有一个登录页面和一个用于经过身份验证的用户的初始仪表板,则流程将如下所示:

  1. 用户进入登录页面并点击“通过 OAuth2 进行身份验证”
  2. 用户被重定向到 OAuth2 身份验证服务器
  3. 用户通过身份验证并使用身份验证结果重定向到您的新身份验证处理 URI
  4. 您的应用程序保存结果,认为用户已通过身份验证并将他重定向到初始仪表板页面。

您需要决定要使用哪种 OAuth2 流程、在哪里存储 token 以及应用程序的哪一部分将具有 OAuth2 客户端角色(Java 后端或 HTML/JavaScript 前端)。如果您只需要身份验证(获取用户身份),您可能只需要一个 ID token (来自 OpenID Connect 扩展)。

有关更多信息,您可以阅读写得很好的 OAuth2 RFC或一些文章/教程,可以让您对该主题有一个简化的看法。

编辑:认证成功后,如果想回到原来的状态请求的页面,在身份验证请求的 state 参数中包含请求的 URL。您的新身份验证处理程序将获得不变的 state 值(同样作为 state URL 参数),您可以将用户重定向到该 URL,而不是硬编码的(仪表板)。请注意,state 值还应包含用于防止跨站点请求伪造的值,如 OAuth2 RFC 中所述。

关于java - JSP 和 OAUTH2 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45499793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com