【问题标题】:Liferay jsonws api: how do I get p_auth from a client?Liferay jsonws api:如何从客户端获取 p_auth?
【发布时间】:2015-07-10 11:47:55
【问题描述】:

我正在尝试开发一个将使用 liferay 门户 jsonws api 的 javascript 移动应用程序。我有用户名和密码。如果我尝试使用 curl 和基本身份验证的请求,我可以访问资源,但我没有得到令牌作为回报,我得到一个带有 sessionid 的 cookie,并且我必须在每个请求中包含用户名和密码。我无法控制门户。如何获取 p_auth 令牌?

【问题讨论】:

  • 你试过这个吗:Liferay.authToken。它位于 liferay 的 js 文件之一中查看 liferay 源代码。
  • 感谢您的回答。我无法访问门户本身;其他人使用 liferay 6.2 开发了 json api,我无法控制任何事情。我以为我会有一个登录端点,但到目前为止似乎并非如此。 Liferay 是可以在外部应用程序中使用的 js 库吗?从文档来看,确实不清楚,负责门户的人并没有真正分享太多,只是给了我一个用户。

标签: liferay liferay-6


【解决方案1】:

您可以使用Liferay.authToken 从客户端获取p_auth

您可以转到浏览器控制台并输入Liferay.authToken 以验证该对象是否可用。

我使用相同的对象进行身份验证,我列出了 JSONW 服务调用的结果。您可以将值保存在变量中并根据要求在任何位置进行设置。我发现这是最简单的方法。

var pAuth = Liferay.authToken;
console.log(pAuth);

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    注意,参数p_auth是用来防止CSRF攻击的。您可以使用以下代码获取值:

    String pAuth = com.liferay.portal.security.auth.AuthTokenUtil.getToken(request);
    

    TokenUtil 是 liferay 核心的一部分,因此您必须创建一个钩子,因为 jsp 必须在 liferay 目录中,而不是在插件或 portlet 中,因为在其他类路径中您无法访问此对象。

    【讨论】:

    • 如果p_auth是为了防止CSRF,那么为什么它可以通过浏览器控制台中的Liferay.authToken对象作为开放访问呢?
    • Liferay.authToken 在对门户的每个请求中都会更新。下一个请求需要传递门户返回的最后一个令牌,否则该请求将被忽略。
    【解决方案3】:

    您可以使用Liferay.authToken预定义变量获取身份验证令牌(p_auth)。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 1970-01-01
      • 2020-06-20
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2016-08-31
      • 1970-01-01
      相关资源
      最近更新 更多