Php 如何通过iframe调用验证第三方网站
我在一所学院工作,需要整合我的课程,这样他们的学生可以在学院网站上访问。我们将使用简单的iframe集成 用户将在学院网站上注册,他们将把用户信息传递给我,这样我就可以开始一个会话,并允许访问我网站上的课程页面,他们将通过iframe显示在他们的页面上 我的网站是建立在灯和我使用ZEND框架 这是我计划如何做的基本结构 1) 在学院网站上,作为iframe代码的一部分,他们将调用我的一个行动课程并发送用户电子邮件Php 如何通过iframe调用验证第三方网站,php,zend-framework,authentication,iframe,http-authentication,Php,Zend Framework,Authentication,Iframe,Http Authentication,我在一所学院工作,需要整合我的课程,这样他们的学生可以在学院网站上访问。我们将使用简单的iframe集成 用户将在学院网站上注册,他们将把用户信息传递给我,这样我就可以开始一个会话,并允许访问我网站上的课程页面,他们将通过iframe显示在他们的页面上 我的网站是建立在灯和我使用ZEND框架 这是我计划如何做的基本结构 1) 在学院网站上,作为iframe代码的一部分,他们将调用我的一个行动课程并发送用户电子邮件 <iframe src="http://mywebsite/user/val
<iframe src="http://mywebsite/user/validate/email/alice@gcc.com"></iframe>
这就是我到目前为止所做的——显然它是有效的
我的问题
1) 这是最好的方法吗。我不会有用户的密码,因为认证发生在大学网站上,他们不希望用户直接登录我的网站
2) 这是个大问题。我有点困惑于如何最好地证明这个电话是由这所大学打的。我该怎么做呢?他们会在这个iframe调用中传递一个加密的令牌吗?只有我有解密它的密钥-我没有这么做-我不知道我是否把一些简单的事情复杂化了
如有任何意见或建议,将不胜感激
谢谢我的推荐摘要
- 看看他们是否有解决办法。如果他们这样做了,就利用他们所拥有的
- 如果没有,建议他们得到(我推荐),并使用它
- 如果他们不愿意,你可以通过建立Facebook到Facebook应用程序交换的模型来实现
在FSSO中,有一个“身份提供者”(IP)和一个“服务提供者”(IP)。学院是身份提供者,你是服务提供者。可以有许多服务提供商。只要记住IP=大学,SP=你。FSSO的要点包括:
array (
// ...
[Shib-Application-ID] => my_course_catalog
[Shib-Session-ID] => _6c45a07c8bc73190242212124221b7
[Shib-Identity-Provider] => https://shib.college.edu/idp/shibboleth
[Shib-Authentication-Instant] => 2013-12-31T22:42:07.101Z
[Shib-AuthnContext-Decl] => urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
[affiliation] => member@college.edu;staff@college.edu
[eppn] => XXXXXX@college.edu
[unscoped-affiliation] => member;staff
// ...
[REMOTE_USER] => XXXXXX@college.edu
// ...
)
我在ZF1中实现这一点的方式是一个控制器插件,用于查找Shib会话ID
。如果找到,制作一个Shibboleth资源,并填充Shib会话ID
和REMOTE_用户
,我可以稍后查询所需的一切。如果未找到,请重定向到IP登录页面。(由于您处于IFRAME中,:改为重定向到“无需显示的内容”/“默认内容”操作。)
如果他们不接受安装FSSO的建议怎么办?然后你必须自己动手,正如你所指出的,关键在于信任
他们向您发送令牌(您的#2问题)的问题是,令牌可以被截获(以不同程度的容易程度)并被删除。你不能相信你所得到的。你必须得到你所得到的,并要求你信任的来源来验证你所得到的
更大的问题是,您需要知道现在浏览网页的用户是否与以前登录和现在登录的用户相同。为此,您需要学院发布的登录cookie,并且需要检查cookie当前是否有效
要安全地完成这项工作,没有简单的方法。这就是为什么FSSO被发明的原因,所以所有的重物都可以以一种可证明安全的方式一次性完成。如果你还拥有自己的roll,我能提供的最佳模式就是Facebook应用程序。在第三方服务器上运行的“应用程序”可以“看到”登录的Facebook用户。为了让你开始,这里是
(目前应用程序身份验证的方式是使用登录会话ID,您可以通过Facebook查看登录会话ID…但我知道浏览器不再允许这样做,您必须绕开它。我不确定,需要记住一些事情。)
从长远来看,FSSO是学校的资产,也是你的福音。如果可能的话,就这样做吧。否则,具有身份验证的IFRAME第三方应用程序的最新技术是Facebook到Facebook的应用程序交换,所以这是一个模型。祝你好运 我可能误解了你的问题,但据我推测,你需要: -验证用户身份的一种方法 -能够在第一次加载时传递他们希望查看的页面和他们的电子邮件地址 其基础就是对称密钥身份验证,接下来就是将其混搭起来的方法 将您的数据放在一起(电子邮件地址、要登录的页面),然后使用强键对其进行散列 在另一端解密,瞧,完成了 如果你的密码(钥匙)很难猜到,这种方法是安全的——以下是一种很难破解的方法 认证 有两种方法可以做到这一点——如果您可以访问他们的服务器(或者有人可以为您插入一些代码),那么下面的方法就可以了 创建一个执行以下操作的php脚本 I H
array (
// ...
[Shib-Application-ID] => my_course_catalog
[Shib-Session-ID] => _6c45a07c8bc73190242212124221b7
[Shib-Identity-Provider] => https://shib.college.edu/idp/shibboleth
[Shib-Authentication-Instant] => 2013-12-31T22:42:07.101Z
[Shib-AuthnContext-Decl] => urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
[affiliation] => member@college.edu;staff@college.edu
[eppn] => XXXXXX@college.edu
[unscoped-affiliation] => member;staff
// ...
[REMOTE_USER] => XXXXXX@college.edu
// ...
)
$serverTimeStamp = timestamp;
$additionalNoise = "THEcat1sch33sy";
$time = $serverTimeStamp . "XAB"; <- needs to be a random code as delimeter.
$data = $additionalNoise + "email@email.com";
$salt = "wh4tW0u1dB4tm4nD0?" + $serverTimeStamp;
$encrypted = mcrypt of $data and $salt ($salt is shared key);
$authenticationcode = $time . $encrypted;
<iframe src="http://yoursite/validate/COMPLETELYRANDOMSTRING"></iframe>
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)
Simply add it to the $data - so you would pass $email + "seperator" + $coursepage.