为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法访问在 openid 连接过程中设置的会话数据?

有没有办法访问在 openid 连接过程中设置的会话数据?

慕丝7291255 2023-06-14 15:39:07
当我尝试访问 Liferay Portal 会话数据时,它似乎不包含由内部 Liferay Portal 进程存储的数据。是否可以访问登录过程中存储的令牌OpenId-Connect?基本上,我的任务是寻找软件,它可以使实现门户更容易,该门户显示多个不同内部平台的 API 端点提供的功能。目前,我正在查看 Liferay Portal 7.2。对于登录,我使用了 Liferay Portal 的 OpenId-Connect 实现,因为身份验证由内部登录服务器处理。在 OpenID 连接登录过程结束时返回的访问令牌是一个 API 令牌,然后我想用它来访问各种 API 端点。目前我得到这样的会话HttpSession httpSession = PortalUtil.getHttpServletRequest(actionRequest).getSession();在查看了 OpenId-Connect 实现之后com.liferay.portal.security.sso.openid.connect.internal.OpenIdConnectServiceHandlerImpl然后我尝试像这样获取会话对象。Object openIdConnectSessionObject = httpSession.getAttribute("OPEN_ID_CONNECT_SESSION");但在这一点上,openIdConnectSessionObject总是null。我读过不同的范围有不同的会话,但是有没有办法访问这些数据,或者 Liferay Portal 是否真的不适合我正在尝试做的事情。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

有一个细节值得注意:

PortalUtil.getHttpServletRequest(actionRequest)将使您能够访问一个PortletRequest依附于HttpServletRequest接口的人工对象,以防某些 API 需要来自 servlet 而不是门户世界的请求。

PortletRequest 仅包含指向特定 portlet 的参数(和会话信息),不包含任何其他内容。

如果您对实际的底层 HttpServletRequest 感兴趣,您将需要PortalUtil.getOriginalServletRequest,它将 HttpServletRequest 作为输入。你会以你已经探索过的方式得到它。最后,你将拥有

session = PortalUtil.getOriginalServletRequest(
    PortalUtil.getHttpServletRequest(actionRequest)).getSession();

获取实际服务器的会话。

我没有检查这是否有用,甚至没有检查您提出的问题的可取解决方案,但它可能会让您进一步解决问题。


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信