我想创建一个webapp,可能在Vaadin中,我想在WordPress网站的管理区域内使用它。大多数事情都很清楚:
BUT
我不完全确定,我如何验证我的用户身份。我想使用WordPress的auth系统。如果我的用户登录到WP站点并且具有管理员权限,我想向他们显示我的站点。否则,我想抛出HTTP404,或者其他什么。
我已经检查了WordPress创建的cookie。当我登录我的网站时,我发现创建了2个cookie,名为:
wordpress_HASH
wordpress_logged_in_HASH
其中HASH
是网站网址的md5哈希值。
Theese cookies看起来像这样:
wordpress_HASH
:wordpress_logged_in_HASH
:我发现了这个:
7C%
是分隔符,代表|
。1422101199
)是一个Unix时间戳,它是cookie的实验日期。kd5Qp39eAQc4JNZTUBxlSjAMKeQqdCX00l6bnc64dxu
)是一个sessionId。
session_tokens
。它的值是一个类似JSON的字符串,它包含一些关于用户的数据:他的浏览器,实验时间和所有当前使用的sessionId的哈希值。这个字符串是什么?我怎么解析这个?这不完全是JSON。我的想法是从我的应用程序解析这个cookie,并将它的数据与数据库中的数据进行比较。但是我有很多问题。
谢谢!
答案 0 :(得分:1)
如果您只是从cookie中读取用户名,恶意用户可以猜测或检测用户名并伪造该cookie并可能获得对基于Vaadin的部分的访问权。
如果您想要一个简单而安全的解决方案,您可能希望使用Quercus在JVM上托管您的wordpress。我在一个网站上做这个并且它工作得很好,实际上比基本的LAMP堆栈(没有php加速器)更快。然后,您可以在WP中创建adds stuff to java session。
的挂钩另一个简单而安全的方法是从Java以某种方式访问php会话。我不知道从JVM读取基本的PHP会话数据是多么容易,但似乎有php session serializing的某种替代xml(WDDX)格式。这应该很容易在Java中处理 - 假设您可以从servlet中读取会话cookie。最后一个选项是将一个随机哈希值存储到另一个熟的和相应的数据(至少用户名)到某个flatfile或WP数据库(你可能会使用它)。
答案 1 :(得分:0)
情景1
根据我对您的要求的了解,这是我能提出的最明显,最安全的方法。在你的WordPress插件的PHP中:
if ( current_user_can( 'manage_options' ) ) {
$iframe = "<iframe src='YourJavaApplet.html'></iframe>";
echo $iframe;
} else {
echo "Sorry, you're not authorized to view my applet";
}
情景2
此方案假设您以某种方式需要将信息传递到Java applet,而您无法使用方案1中的方法(我无法想象为什么)。 假设您只是想确保“某人”已登录,并且您并不真正关心谁,只要他们具有管理员权限,那么在PHP中您可以执行以下操作:
if ( current_user_can( 'manage_options' ) ) {
$is_admin = 1;
} else {
$is_admin = 0;
}
现在,假设您正在使用PHP构建和输出iframe,因此可以修改>> iframe中的内容,您可以执行以下操作:
<iframe>
<APPLET code="YourApplet.jar" width="300" height="50">
<PARAM name="admin" value="<?php echo $is_admin ?>">
</APPLET>
</iframe>
现在,您将能够在Java小程序中访问参数“admin”的值。
SCENARIO 2.5
如果您还需要识别有关用户的信息,例如电子邮件地址,那么您可以将其添加到第一段代码中:
$current_user = wp_get_current_user();
$email = $current_user->user_email;
然后将其添加到代码的第二位:
<PARAM name="email" value="<?php echo $email ?>">
现在您可以访问用户的电子邮件地址。
重要的是要注意,如果您决定采用这种方式,可能存在严重的安全隐患,但由于您正在处理客户端小程序,因此您的选项非常有限保护它。