Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过iframe调用验证第三方网站_Php_Zend Framework_Authentication_Iframe_Http Authentication - Fatal编程技术网

Php 如何通过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集成

用户将在学院网站上注册,他们将把用户信息传递给我,这样我就可以开始一个会话,并允许访问我网站上的课程页面,他们将通过iframe显示在他们的页面上

我的网站是建立在灯和我使用ZEND框架

这是我计划如何做的基本结构

1) 在学院网站上,作为iframe代码的一部分,他们将调用我的一个行动课程并发送用户电子邮件

<iframe src="http://mywebsite/user/validate/email/alice@gcc.com"></iframe>
这就是我到目前为止所做的——显然它是有效的

我的问题

1) 这是最好的方法吗。我不会有用户的密码,因为认证发生在大学网站上,他们不希望用户直接登录我的网站

2) 这是个大问题。我有点困惑于如何最好地证明这个电话是由这所大学打的。我该怎么做呢?他们会在这个iframe调用中传递一个加密的令牌吗?只有我有解密它的密钥-我没有这么做-我不知道我是否把一些简单的事情复杂化了

如有任何意见或建议,将不胜感激
谢谢

我的推荐摘要

  • 看看他们是否有解决办法。如果他们这样做了,就利用他们所拥有的
  • 如果没有,建议他们得到(我推荐),并使用它
  • 如果他们不愿意,你可以通过建立Facebook到Facebook应用程序交换的模型来实现
详细信息
在FSSO中,有一个“身份提供者”(IP)和一个“服务提供者”(IP)。学院是身份提供者,你是服务提供者。可以有许多服务提供商。只要记住IP=大学,SP=你。FSSO的要点包括:

  • 用户通过IP而不是SP进行身份验证
  • 当IP发出会话已通过身份验证的信号时,SP信任该会话
  • SP仅在用户在IP进行身份验证时才接收经过身份验证的会话信号
  • ,大多数大学都有FSSO。因此,我的第一个建议是接受一个事实调查任务,检查学院有什么。如果他们已经有了FSSO,你的内容会更安全,你的代码会更简单,晚上你会睡得更好。幸运的是,根据我的经验,大学经常会有一些东西,但这些东西的知识不一定是广播的——你必须挖掘一些

    如果他们没有FSSO,我的下一个建议是建议他们安装一个。请记住,单点登录并不意味着联邦ID,而且您希望两者兼而有之

    我个人建议。是的。我用过它的灯和ZF1。我知道这很有效。有了Shibboleth,学院将建立一个Shibboleth IP,您将一起参与,并且一旦用户登录,您将在每个连接上收到环境变量,如下所示:

    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.