php – 如何通过iframe调用验证第三方网站
作者:互联网
我正在和一所大学合作,需要整合我的课程 – 所以他们的学生可以在大学网站上访问它.我们将使用简单的iframe集成.
用户将在学院网站上注册,他们会将用户信息传递给我,这样我就可以开始一个会话并访问我的网站上的课程页面,通过iframe他们将在他们的网站上显示.
我的网站建立在LAMP上,我正在使用ZEND框架
这是我计划如何做的骨架结构
1)在大学网站上,作为iframe代码的一部分 – 他们将调用我的一个动作类并传递用户电子邮件
<iframe src="http://mywebsite/user/validate/email/alice@gcc.com"></iframe>
2)现在在用户控制器中 – 验证操作 – 我将基本检查用户是否不存在 – 创建新用户或使用他的电子邮件加载现有用户并启动Zend Auth实例并将用户写入存储并重定向到他的课程页面如下所示
$currentUser = $userModel->loadUserProfileByEmail($this->_getParam('email'));
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$storage->write($currentUser);
return $this->_redirect('/user/my-courses/');
这是我到目前为止 – 显然它的工作原理
我的问题
1)这是最好的方法吗?我没有用户的密码,因为身份验证发生在大学网站上,他们不希望用户直接登录我的网站.
2)这是一个大问题.我对这个特定的大学正在进行此调用的最佳认证方式感到困惑.我如何解决这个问题 – 他们是否通过加密令牌以及iframe调用 – 只有我有密钥才能解密它 – 我没有这样做 – 我不知道我是否过于复杂化了一些简单的事情.
任何建议或意见将不胜感激
谢谢
解决方法:
我可能误解了你的问题,但从我收集的内容中你需要:
– 一种验证用户身份的方法
– 能够通过他们希望在首次加载时查看的页面及其电子邮件地址.
其基础是简单的对称密钥身份验证 – 以下所有内容都是将其混搭的方法.
将您的数据放在一起(电子邮件地址,登陆页面),然后使用强密钥对其进行哈希处理.
在另一端解密,瞧瞧 – 完成了.
如果您的密码(密钥)难以猜测,此方法是安全的 – 以下是一种难以破解的方法.
认证
有几种方法可以做到这一点 – 如果你有权访问他们的服务器(或那些可以为你插入一些代码的人),那么以下方法就可以了.
创建一个执行以下操作的php脚本.
我已经大量过度设计,以证明一种破坏性的硬化方式的破坏 – 你可以选择自己的方式!
(伪代码)
$serverTimeStamp = timestamp;
$additionalNoise = "THEcat1sch33sy";
$time = $serverTimeStamp . "XAB"; <- needs to be a random code as delimeter.
$data = $additionalNoise + "email@email.com";
$salt = "wh4tW0u1dB4tm4nD0?" + $serverTimeStamp;
$password然后需要使用可逆哈希进行散列(mcrypt是一个好的起点)
$encrypted = mcrypt of $data and $salt ($salt is shared key);
$authenticationcode = $time . $encrypted;
这将给你一个非常强大的随机字符串,前面有一个时间戳,然后是XAB,然后是一个随机的散列字符串.
然后,这将传递给您的用户验证脚本.
<iframe src="http://yoursite/validate/COMPLETELYRANDOMSTRING"></iframe>
从那里你反转过程.
重要(修改) – 我完全忘记了一个IMPORTANT元素 – 存储在数据库中发送给您的随机字符串.这些字符串是“一次性使用” – 如果再次收到相同的字符串则是攻击.
这可以通过盐中和字符串开头的时间戳来促进 – 可以使用完全不同的字符串每天发送1000次相同的数据.
Get random string.
get time-stamp from front of random string -> using regex / index of looking for numbers and then XAB (hence the random XAB string - it is just a separator)
$timeStamp = "10200192XAB";
"wh4tW0u1dB4tm4nD0?" <-shared secret key.
$salt (secret key) = "wh4tW0u1dB4tm4nD0?" + $timeStamp;
用盐解密
你得到你的数据
"THEcat1sch33sy" (your additional noise) (which is also a fixed shared key in effect)
只需删除“THEcat1sch33sy”,然后你就可以获得你的电子邮件地址(然后你可以在百万分之一的机会中验证随机字符串实际上是否会在begninning中吐出“THEcat1sch33sy”.
Voila – 不是100%而是相信我 – 如果我想进入你的服务器 – 我不会这样尝试!
通过页面
Simply add it to the $data - so you would pass $email + "seperator" + $coursepage.
希望这有帮助(并且很清楚)
标签:http-authentication,php,authentication,iframe,zend-framework 来源: https://codeday.me/bug/20190825/1717740.html