如何使用php对DevOps API进行身份验证

时间:2019-04-15 14:59:35

标签: php rest azure-devops

我正在尝试通过php / curl和个人访问令牌访问Azure DevOps REST API,但是在身份验证过程中遇到了麻烦。

文档指出,必须先将pat转换为base64,然后将其添加到HTTP标头中,但是我无法正确执行此操作。这是我尝试过的:

function GetBuilds($url, $token) {  
  $ci = curl_init();

  curl_setopt($ci, CURLOPT_URL, $url);
  curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ci, CURLOPT_TIMEOUT, 30);
  curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
  curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ci, CURLOPT_HTTPHEADER, array(
    "content-type: text/html",
    "content-length: 0",
    "Authorization: Basic ".base64_encode($token)   // Several variants have been tried.
    )
  );

  $buffer = curl_exec($ci); 
  curl_close($ci);

  return $buffer;
};

$ url是指向DevOps API的链接,当使用浏览器调用(登录后)时,该URL起作用,但是,当调用具有此功能的页面时,它将返回字符串“对象已移至此处”。带有“此处”的bee,是指向Microsoft在线登录页面的链接。

2 个答案:

答案 0 :(得分:1)

非常确定您需要将其转换为base64:

user@domain.com:token

不仅仅是令牌。 user@domain.com-是颁发令牌的用户

答案 1 :(得分:1)

丹尼尔·曼(Daniel Mann)的评论是解决方案(谢谢!),尽管我不允许直接将其标记为此类。将“授权”行更改为此:

"Authorization: Basic ".base64_encode(":".$token)

成功授权了请求。