我需要帮助在使用Office365单点登录(单点登录)的网站上使用PHP-CURL登录。
在过去,在PHP中使用curl来使用用户名和密码登录是没有问题的:
<?php
$URL = "https://intra.epitech.eu/"
// if (!isset($argv[1]))
// die("Please specify the event URL");
$url_event = rtrim("https://intra.epitech.eu/module/2016/B-PAV-450/PAR-5-1/registered", "/");
$ch = curl_init();
$opts_base = array( CURLOPT_URL => $URL.'login',
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_VERBOSE=> FALSE,
CURLOPT_COOKIEJAR => "cookie.txt",
CURLOPT_COOKIEFILE => "cookie.txt",
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'Connection: Keep-Alive')
);
curl_setopt_array($ch, $opts_base);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"login":"firstname.name@epitech.eu","password":"PASSWORD123"}');
$html = curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, FALSE);
curl_setopt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url_event);
$html = curl_exec($ch);
var_dump($html);
// Some code...
?>但是最近一个Udate删除了帐户登录系统,现在它使用了Office365 SSO身份验证"Connect“:uri=https%3A%2F%2Fintra.epitech.eu%2Fauth%2Foffice365&state=%2F
因此,我的问题是:我如何连接到网站使用卷发提出这样的要求?
我必须创建一个网站,使用Office连接登录,然后使用用户的信息登录到我的学校内部网,使用SSO获得一些信息,比如用户的等级“管理,学生等等”,并发出一些cURL帖子请求来推送一些数据。
我完全不知道如何使用Office身份验证连接到intranet :/
如果auth操作正确,我应该有如下的json数据:
[
{
"login": "user2.lastname@epitech.eu",
"picture": "https:\/\/cdn.local.epitech.eu\/userprofil\/blabla.jpg",
"title": "Firstname Lastname",
"location": "FR\/PAR",
"promo": 2019,
"course_code": "bachelor\/classic",
"grade": "-",
"cycle": "bachelor",
"date_ins": "2016-09-13 21:49:05",
"credits": 6,
"flags": [],
"semester": "B5"
},
{
"login": "otherguy.lastname",
"picture": "https:\/\/cdn.local.epitech.eu\/userprofil\/blabla.bmp",
"title": "Firstname LastName",
"location": "FR\/PAR",
"promo": 2019,
"course_code": "bachelor\/classic",
"grade": "-",
"cycle": "bachelor",
"date_ins": "2016-09-14 01:39:36",
"credits": 6,
"flags": [],
"semester": "B5"
},
{
...
}
]
但我不能登录..。所以很难继续我的项目..。
我真的希望你能帮我这个忙。如果需要的话,请随时询问你想要的任何信息,因为英语不是我的母语。
提前谢谢,致以最良好的问候。扬尼克。
发布于 2016-11-07 17:03:27
我没有使用Office流程的经验,但是(根据您的意见),您的问题可能是使用相同的cURL句柄来处理两个不同的请求。以下是一些建议。
尝试为每个请求创建一个句柄。
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL , $URL.'login');
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER , FALSE);
curl_setopt($ch1, CURLOPT_COOKIEJAR , "cookie.txt"); it will save your cookies in the cookie.txt file after curl_close()
curl_setopt($ch1, CURLOPT_RETURNTRANSFER , TRUE);
curl_setopt($ch1, CURLOPT_HTTPHEADER , array('Content-Type: application/json', 'Connection: Keep-Alive'));
curl_setopt($ch2, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"login":"firstname.name@epitech.eu","password":"PASSWORD123"}');
$html = curl_exec($ch1);
curl_close($ch1);请注意,我更喜欢curl_setopt而不是curl_setopt_array,但这只是个人偏好,不应该影响您的脚本。
除非您已经有了文件cookie.txt,否则行curl_setopt($ch1, CURLOPT_COOKIEFILE , "cookie.txt");是不必要的。该文件将在curl_close之后创建,因为您使用的是CURLOPT_COOKIEJAR。请参阅PHP手册中这些选项的修改。
CURLOPT_COOKIEJAR:将所有内部cookie保存到句柄关闭时的文件名,例如在调用curl_close之后。
此外,这也是调试代码的完美步骤。试着打印出$html,看看它的内容,也许它会给威尔一些提示。您还可以使用选项CURLOPT_VERBOSE来TRUE,并更精确地分析您的请求。
确保答案正确后,为第二个请求创建第二个句柄。
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_POSTFIELDS, FALSE);
curl_setopt($ch2, CURLOPT_POST, FALSE);
curl_setopt($ch2, CURLOPT_URL, $url_event);
curl_setopt($ch2, CURLOPT_COOKIEFILE , "cookie.txt");
$html2 = curl_exec($ch2);
curl_close($ch2);
var_dump($html2);我认为这里是curl_setopt($ch2, CURLOPT_COOKIEFILE , "cookie.txt");的正确位置,因为现在文件已经存在了。文件又一次:
CURLOPT_COOKIEFILE:包含cookie数据的文件的名称。cookie文件可以是Netscape格式的,也可以是简单的HTTP样式的标头,转储到文件中。如果名称是空字符串,则不会加载cookie,但仍然启用cookie处理。
https://stackoverflow.com/questions/40427431
复制相似问题