簡體   English   中英

JSP和OAUTH2身份驗證

[英]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端點獲取),然后重定向到您已有的應用程序頁面。

因此,無需重寫您的應用程序。 例如,如果您具有登錄頁面和用於身份驗證用戶的初始儀表板,則流程將如下所示:

  1. 用戶進入登錄頁面,然后單擊“通過OAuth2進行身份驗證”
  2. 用戶被重定向到OAuth2身份驗證服務器
  3. 用戶通過身份驗證,並通過身份驗證結果重定向到新的身份驗證處理URI
  4. 您的應用程序將保存結果,認為用戶已通過身份驗證並將其重定向到初始儀表板頁面。

您需要確定要使用哪種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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM