From 7a57ca9a95c8cac71eabed16d833502943407e52 Mon Sep 17 00:00:00 2001 From: Alfredo Oliviero Date: Tue, 5 Mar 2024 18:04:16 +0100 Subject: [PATCH] curl code, detailed instructions --- CHANGELOG.md | 4 + .../gcube/portlets/admin/RPTTokenReader.java | 55 ++- src/main/webapp/css/main.css | 11 + src/main/webapp/html/rpttokenreader/view.jsp | 404 +++++++++++++++--- 4 files changed, 401 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb1be21..ea1aa73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ ## [v1.2.0] - 2023-03-20 - Decode Button +- Updatet layout +- Added refresh token +- Added expiration +- Button for decode on https://jwt.io/ ## [v1.0.1] - 2022-05-25 diff --git a/src/main/java/org/gcube/portlets/admin/RPTTokenReader.java b/src/main/java/org/gcube/portlets/admin/RPTTokenReader.java index 106391e..5b7a296 100644 --- a/src/main/java/org/gcube/portlets/admin/RPTTokenReader.java +++ b/src/main/java/org/gcube/portlets/admin/RPTTokenReader.java @@ -13,12 +13,15 @@ import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import javax.servlet.http.HttpServletRequest; +import java.util.Base64; + import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.impl.ScopeBean; import org.gcube.common.scope.impl.ScopeBean.Type; import org.gcube.oidc.rest.JWTToken; import org.gcube.oidc.rest.OpenIdConnectConfiguration; import org.gcube.oidc.rest.OpenIdConnectRESTHelper; +import org.gcube.oidc.rest.OpenIdConnectRESTHelperException; import org.gcube.portal.oidc.lr62.JWTCacheProxy; import org.gcube.portal.oidc.lr62.LiferayOpenIdConnectConfiguration; import org.gcube.vomanagement.usermanagement.GroupManager; @@ -27,6 +30,7 @@ import org.gcube.vomanagement.usermanagement.model.GCubeGroup; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; +import com.liferay.portal.kernel.json.JSONArray; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.model.User; @@ -78,9 +82,16 @@ public class RPTTokenReader extends MVCPortlet { System.out.println("Selected context="+context); HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(resourceRequest)); JWTToken umaToken = null; + + + resourceResponse.setContentType("application/json"); + JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + try { User theUser = PortalUtil.getUser(resourceRequest); OpenIdConnectConfiguration configuration = LiferayOpenIdConnectConfiguration.getConfiguration(httpReq); + + jsonObject.put("token_url", configuration.getTokenURL().toString()); JWTCacheProxy jwtCacheProxy = JWTCacheProxy.getInstance(); String sessionId = httpReq.getSession().getId(); String urlEncodedContext = null; @@ -93,19 +104,51 @@ public class RPTTokenReader extends MVCPortlet { JWTToken authToken = jwtCacheProxy.getOIDCToken(theUser, sessionId); umaToken = OpenIdConnectRESTHelper.queryUMAToken(configuration.getTokenURL(), authToken.getAccessTokenAsBearer(), urlEncodedContext, null); log.debug("Got a new UMA token " + umaToken.getTokenEssentials()); - } catch (Exception e) { + } catch (OpenIdConnectRESTHelperException e) { + resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE, "" + e.getStatus()); + e.printStackTrace(); - JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); jsonObject.put("success", false); jsonObject.put("comment", e.getMessage()); resourceResponse.getWriter().println(jsonObject); super.serveResource(resourceRequest, resourceResponse); + return; + } catch (Exception e) { + e.printStackTrace(); + jsonObject.put("success", false); + jsonObject.put("comment", e.getMessage()); + resourceResponse.getWriter().println(jsonObject); + super.serveResource(resourceRequest, resourceResponse); + return; } - String toReturn = umaToken.getAccessTokenString(); - resourceResponse.setContentType("application/json"); - JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + + // } catch (Exception e) { + // e.printStackTrace(); + // JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + // jsonObject.put("success", false); + // jsonObject.put("comment", e.getMessage()); + // resourceResponse.getWriter().println(jsonObject); + // super.serveResource(resourceRequest, resourceResponse); + // } + jsonObject.put("success", true); - jsonObject.put("comment", toReturn); + jsonObject.put("access_token", umaToken.getAccessTokenString()); + jsonObject.put("refresh_token", umaToken.getRefreshTokenString()); + + jsonObject.put("raw_token", umaToken.getRaw()); + + jsonObject.put("access_token_exp", umaToken.getExp()); + jsonObject.put("essential", umaToken.getTokenEssentials()); + + jsonObject.put("client_id", umaToken.getAzp()); + + JSONArray audiences = JSONFactoryUtil.createJSONArray(); + List list_audiences = umaToken.getAud(); + for (int i = 0; i < list_audiences.size(); i++) { + audiences.put((String) list_audiences.get(i)); + } + jsonObject.put("audience", audiences); + resourceResponse.getWriter().println(jsonObject); super.serveResource(resourceRequest, resourceResponse); } diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index e69de29..917712c 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -0,0 +1,11 @@ +code.wraptext { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; +} + +.bg_white { + background-color: white !important; +} \ No newline at end of file diff --git a/src/main/webapp/html/rpttokenreader/view.jsp b/src/main/webapp/html/rpttokenreader/view.jsp index 58cbc22..3ab8b29 100644 --- a/src/main/webapp/html/rpttokenreader/view.jsp +++ b/src/main/webapp/html/rpttokenreader/view.jsp @@ -1,67 +1,196 @@ -<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> -<%@include file="../init.jsp"%> -<%@ page import="org.gcube.vomanagement.usermanagement.model.GCubeGroup"%> +<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> +<%@include file="../init.jsp" %> +<%@ page import="org.gcube.vomanagement.usermanagement.model.GCubeGroup" %> -<% -List userGroups = (List) request.getAttribute("userGroups"); +<% List userGroups = (List) request.getAttribute("userGroups"); pageContext.setAttribute("userGroups", userGroups); List userContexts = (List) request.getAttribute("userContexts"); pageContext.setAttribute("userContexts", userContexts); - %> - -

Select the context:

-
-
- -
-
- -
-
- - -
-
- You can use https://jwt.io/ - to -
- + + +
+ Configuration error, no context available +
+
+ +
+ +

Current context: ${userContexts[0]}

+ +
+ + +

Select the context:

+ +
+ +
+
+ +
+
+ + + + +
+
+
+
+ Obtain your personal OAuth2 Access and Refresh Tokens, to be used for + programmatic + interaction with the services. +
Do not use this token to authenticate services but only for personal access +
+
+ +
+
+
+
OAuth Access Token (Bearer Authorization) +
+ +
+ +
+ +
+ + +
+
+ + +
+ + +
+
+
Oauth2 Refresh Token +
+ +
+ +
+ +
+ + + +
+
+ +
+ + +
+
Refresh parameters
+ +
+ refresh token url: + +
+ +
+ client_id:
+
+ +
+ curl refresh request (copy): +
+
+ +
+ You can decode the tokens using https://jwt.io/ +
+
+ + +
+ Configuration error, no context available +
+ + + + \ No newline at end of file