我有一個web應用程序需要允許使用不同web客戶端(瀏覽器,原生移動應用程序等)的用戶進行註冊。登錄後,他們可以訪問受限制的內容或他們自己的內容(如他們創建的條目等)。jax-rs其餘web服務認證和授權
我做了什麼至今:我創建了一個JAX-RS休息web服務(我主持我的GlassFish應用),其公開下列方法:
- 寄存器 - 用戶POST的他所期望的用戶名/密碼/電子郵件/等;如果用戶名/電子郵件是唯一的,則在數據庫中創建此用戶的條目(我正在使用Hibernate進行持久化)
- login - 用戶POST的用戶名和密碼。如果它們沒問題,則創建UUID並將其返回給用戶(這將用作未來請求的標記)。我有一個名爲logedusers的表,帶有userID,token,validSince作爲列。
這裏是讓我感到困惑的地方。
比方說,我有另一種方法,getUserEntries,應該返回用戶所做的所有條目。爲了使這一點更清楚,將會有一個Entry表格,其中包含以下字段:entryId,userId,text。
這裏最好的辦法是什麼?
我現在所做的工作,是我做一個GET請求,並在令牌這樣傳遞:
localhost:8080/myApp/getUserEntries?token=erf34c34
之後,如果令牌是有效的,我從logedusers表以及基於用戶ID在該userId上,獲取所有條目並將它們返回爲json。
事情是這樣的:
@GET
@Path("getUserEntries")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserEntries(@QueryParam("token") String token) {
String userId=getUserIdFromToken(token);
if (userId == null){
return Response.status(Response.Status.UNAUTHORIZED).build();
} else {
//get some data associated with that userId, put it in the response object and send it back
return Response.ok().entity(response).build();
}
}
但是,如果我有更多的方法提供的數據,如果他們是通過一個有效的用戶調用會發生什麼?
我不得不在每個方法的開始都做這個檢查。
我想使這個授權過程透明
所以,兩個主要的問題在這裏:
- 這是設計好的?整個用戶/通過身份驗證,服務器創建並存儲令牌給用戶,用戶在將來的請求中發送令牌。
- 如果我有許多終端需要確定主叫用戶的身份,該怎麼辦?我可以使用某些註釋標記它們,使用某種安全提供程序/身份驗證程序(我可以在其中添加自己的邏輯以進行驗證 - 例如,檢查標記是否不超過5天等)。
感謝