如何使用PHP发出简单的SAML请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用PHP发出简单的SAML请求?相关的知识,希望对你有一定的参考价值。

我之前使用过很多php,但我从未使用过SAML,因为我从来没有连接到远程服务器。我已经阅读了几天的各种教程,帖子和示例,现在我仍然没有在哪里。我已阅读:

但仍然没有成功。我想当我在阅读Onelogin,SimpleSAMLphp和Shibboleth的时候,我觉得我在错误的地方,因为我感觉下载并解压缩大文件,因为堆栈将用于服务提供商......在这种情况下,我是身份提供商我认为这就像制作一些xml并将其发送出去一样简单;并寻找答复。不需要这些大量的代码,但也许我错了。

当我看到xml时,大部分都是有道理的。例如:

<saml:Assertion
Version="2.0"
ID=“_34234se72”
IssueInstant="2005-04-01T16:58:33.173Z">
 <saml:Issuer>http://authority.example.com/</saml:Issuer>
 <ds:Signature>...</ds:Signature>
 <saml:Subject>
     <saml:NameID format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">
        jygH5F90l
    </saml:NameID>
 </saml:Subject>
  <saml:AuthnStatement
      AuthnInstant="2005-04-01T16:57:30.000Z">
        <saml:AuthnContext>
          <saml:AuthnContextClassRef>
            urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
          </saml:AuthnContextClassRef>
        </saml:AuthnContext>
   </saml:AuthnStatement>
</saml:Assertion>

我想我理解将'jygH5F901'作为'NameID'发送的过程,但是行行urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport对我来说几乎没有任何意义。有人可以请我指点如何开始或至少在正确的方向。

我需要做的就是:

  1. 获取授权令牌
  2. 交换访问令牌的授权令牌。
  3. 使用该访问令牌从服务提供商数据库获取信息。

任何帮助将不胜感激;我是SAML的新手,所以我可能听起来很愚蠢;但是,如果只有任何人可以将我链接到一个完整的指南或示例解释结构,并有更多的复制粘贴友好的工作。我只需要获得该连接,导入数据然后一旦我可以获得这些返回的变量后所有PHP的东西很容易。谢谢你的时间;我们将非常感谢任何努力。

答案

SAML非常复杂,如果您要手动生成XML,我强烈建议您阅读SAML并查看规范。我建议首先查看规范中的技术概述。

规格:http://saml.xml.org/saml-specifications 技术概述:https://www.oasis-open.org/committees/download.php/27819/sstc-saml-tech-overview-2.0-cd-02.pdf

我警告你,手动执行此操作可能需要做很多工作。我建议像shibboleth一样为此目的使用应用程序设计

以上是关于如何使用PHP发出简单的SAML请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何发出 PHP CORS 请求?

如何在 PHP 中发出异步 HTTP 请求

如何使用 SAML 2.0 响应进行特定 DNN 用户角色组身份验证和授权?

如何使用 cURL 在 PHP 中发出 PATCH 请求?

如何使用 PHP 向网页发出请求?

AWS SSO 在 php 应用程序中使用 SAML