[英]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.