【问题标题】:System Center Operations Manager (SCOM) 1801 REST API Authentication in PHPPHP 中的 System Center Operations Manager (SCOM) 1801 REST API 身份验证
【发布时间】:2019-03-06 00:39:44
【问题描述】:

我正在 PHP 中开发一个集成类,以使用新的 REST API 接口访问 SCOM 数据。我找不到使用 PHP 连接到 API 的其他文档。我到目前为止是这样的:

$url = "http://scomserver/OperationsManager/authenticate";
$username = 'myuser';
$password = 'myPassw0rd';
$request = "";
$cookie = tempnam("/tmp", "CURLCOOKIE");
$requestHeaders = array('Content-Type, application/json; charset=utf-8');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, implode("\r\n", $requestHeaders));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, count($request));
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, -1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$buffer = curl_exec($ch);
$response = curl_getinfo( $ch );
curl_close($ch);

使用此代码,我收到以下错误:

{"errorMessage":"传递的参数不能为空","errorTrace":""}

并且 IIS 日志报告 400 错误。

我该如何解决这个问题?有什么我想念的吗?

谢谢,
恩佐

【问题讨论】:

    标签: php rest scom


    【解决方案1】:

    您缺少请求正文。使用 NTLM 身份验证时,请求正文应通知 SCOM API 您正在这样做。为此,请将“Windows”作为 base-64 编码的 JSON 正文提交,该正文在您的代码中为空。参考这个例子(它在 PowerShell 中,但应该是可读的):https://community.squaredup.com/answers/question/scom-1801-rest-api/

    换句话说,不要更改您的 PHP 代码,而是:

    $request = "Windows";
    $request = utf8_encode($request);
    $request = "\"".base64_encode($request)."\""; // should give you ["V2luZG93cw=="]
    

    【讨论】:

    • 感谢您的回复,马克斯。我已经尝试对此代码进行多次更改。如果我删除 NTLM 身份验证并在正文中传递它,我会收到 401 错误:未经授权,用户名和密码错误。我也尝试过身体中的几种不同数据,但没有运气。总是同样的错误。您提到的 PowerShell 代码运行良好。但我认为 PHP 和 CURL 必须做一些其他的事情。
    • 您好,感谢您的测试。实际上,我又仔细阅读了它,我的错...编辑了答案以修复错误。
    • 太棒了!有效!只是一点点改变:用点替换加号来连接字符串。非常感谢。
    • 谢谢,编辑了正确连接运算符的答案。附言我根本不懂 PHP))
    猜你喜欢
    • 2018-07-26
    • 2017-12-15
    • 2019-03-31
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多