如何获取当前 Liferay 的 JWT 令牌 session

How to get JWT token for current Liferay session

我已将 Liferay v7.3.4 CE 配置为使用 OpenID Connect Provider 通过 AWS Cognito 进行身份验证,一切正常。

我现在想在 sign-in 过程中使用从 Cognito 获得的 JWT 令牌从 Liferay 调用 AWS 中的 REST APIs。

看来这个 JWT 令牌应该在 Liferay 中可用,对吗?如果是这样,将非常感谢演示如何访问它的源代码示例。

然后,此令牌将被添加到 API 对 AWS API 网关实例的调用的授权 header 中,该实例由用户刚从中访问的同一 Cognito 实例保护已登录。但首先要做的是……某人将如何以编程方式访问当前 Liferay session 的 JWT 令牌?

希望这是有道理的。

我已经开始工作了。

首先,我使用 Maven(不是 gradle)构建 Liferay 项目。为此,我将以下内容添加到我的 portlet 的 pom.xml 文件中:

    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.portal.security.sso.openid.connect.api</artifactId>
        <scope>provided</scope>
    </dependency>

接下来,在我的 portlet 的呈现方法中,我添加了以下代码:

public void render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException
{
    try {
        // get the jwtToken from the renderRequest parameter
        String jwtToken = null;
        HttpSession session = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)).getSession();
        if (session.getAttribute(OpenIdConnectWebKeys.OPEN_ID_CONNECT_SESSION) instanceof OpenIdConnectSession) {
            OpenIdConnectSession openIdConnectSession = (OpenIdConnectSession) session.getAttribute(OpenIdConnectWebKeys.OPEN_ID_CONNECT_SESSION);
            jwtToken = openIdConnectSession.getAccessTokenValue();
        }

        // call a REST API with the jwt token
        List<Organization> organizations = masterDataClient.fetchOrganizations(jwtToken);

        // do other stuff

        super.render(renderRequest, renderResponse);
    } catch (Exception e) {
        throw new PortletException(e);
    }

}