使用SSO用户/通行证卷曲

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SSO用户/通行证卷曲相关的知识,希望对你有一定的参考价值。

我正在尝试向网站添加监控以检查它是否有效。

当我去https://yy-dev.zzz.com/home时 - 它要求我提供用户/通行证以便SSO进入申请。

如何使用CURL或类似的命令行实用程序执行此操作?如何提供SSO用户/通行证?

试图自动化测试..

答案

如果您的网站支持HTTP Basic authenticationHTTP Digest authenticationHTTP NTLM authentication,那么curl具有登录的原生支持,例如

curl -u name:passwd https://yy-dev.zzz.com/

但绝大多数网站都有自己的自定义基于http的登录协议,并且不支持任何上述方案。一些网站使用简单的HTTP Post参数通过libcurl轻松登录,如php / libcurl:

<?php
$ch=curl_init();
curl_setopt_array($ch,array(
    CURLOPT_POST=>1,
    CURLOPT_COOKIEFILE=>'', // enables cookie handling, most websites use cookies for logins
    CURLOPT_POSTFIELDS=>array(
        'username'=>'whatever',
        'password'=>'whatever',
    ),
    CURLOPT_URL=>'https://yy-dev.zzz.com/login',
));
curl_exec($ch);

虽然许多网站在允许登录之前需要一个csrf-token和有效的cookie会话,例如

<?php
$ch=curl_init();
curl_setopt_array($ch,array(
    CURLOPT_COOKIEFILE=>'', // enables cookie handling, most websites use cookies for logins
    CURLOPT_URL=>'https://yy-dev.zzz.com/login',
    CURLOPT_RETURNTRANSFER=>1
));
$html=curl_exec($ch);
$domd=@DOMDocument::loadHTML($html);
$csrf_token=$domd->getElementById("csrf_token")->getAttribute("value");
curl_setopt_array($ch,array(
    CURLOPT_POST=>1,
    CURLOPT_POSTFIELDS=>array(
        'username'=>'whatever',
        'password'=>'whatever',
        'csrf_token'=>$csrf_token
    ),
    CURLOPT_URL=>'https://yy-dev.zzz.com/login',
));
echo curl_exec($ch); // logged in!

...和一些网站使登录非常困难,例如https://gmail.com,这里有300行代码..仅登录gmail.com:https://gist.github.com/divinity76/544d7cadd3e88e057ea3504cb8b3bf7e

你需要弄清楚你网站的登录协议。并且因为你没有发布到网站的链接(因此我们SO社区不能自己看看它),你也没有发布你的网站使用的登录协议的分析,我投票结束你的问题,它没有足够的信息来找到解决方案。

以上是关于使用SSO用户/通行证卷曲的主要内容,如果未能解决你的问题,请参考以下文章

聊聊WS-Federation

聊聊WS-Federation

聊聊WS-Federation(test)

金属着色器混合片段接收错误的颜色值

卷曲错误代码 7

PHP 卷曲和 Cookie