[英]JSP and OAUTH2 authentication
我希望这不是一个“太开放”的问题,但我真的不确定如何处理。
我有一个用Java JSP编写的工作Web应用程序,并且与Jersey的Rest接口相连,并在Tomcat 7和MySQL DB上运行。 这是一个非常简单的基于表单的应用程序。 目前,我在AWS上运行它。
JSP是这样的:
<%
String inmsg = request.getParameter("msg");
%>
<html>
<head>
...
其余的类是这样的:
@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?)。 我看到的问题是,该协议(就我所尝试的而言)需要一个/唯一的重定向URL,这是发送到Identity Manager的每个请求的返回点。 我的问题是我没有一个URL,而是一堆URL,每个JSP和Rest入口点都有一个URL。
改变这种状况的正确方法应该是什么? 我看到的唯一方法(并且暂时不将其视为一种选择)是将整个应用程序重写为单个JSP脚本,其中所有不同的动作和页面都被标识为单个入口点的参数。 还有另一种更简单的方法吗?
OAuth2要求您具有一个URI,它将接受来自身份验证服务器的重定向。 整个应用程序只有一个URI。 处理此URI的代码应从URL参数获取值,保存令牌(或从/token
端点获取),然后重定向到您已有的应用程序页面。
因此,无需重写您的应用程序。 例如,如果您具有登录页面和用于身份验证用户的初始仪表板,则流程将如下所示:
您需要确定要使用哪种OAuth2流,在哪里存储令牌以及应用程序的哪一部分将具有OAuth2客户端角色(Java后端或HTML / JavaScript前端)。 如果只需要身份验证(获取用户身份),则可能只需要一个ID令牌(来自OpenID Connect扩展名)。
有关更多信息,您可以阅读编写良好的OAuth2 RFC或一些文章/教程,而不是为该主题提供简化的视图。
编辑:认证成功后,如果要返回到最初请求的页面,请将请求的URL包括在认证请求的state
参数中。 新的身份验证处理程序将保持state
值不变(再次作为state
URL参数),并且您可以将用户重定向到该URL,而不是硬编码的用户(仪表板)。 请注意, state
值还应包含一个用于防止跨站点请求伪造的值,如OAuth2 RFC中所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.