我想将outlook 365日历事件与我的系统同步。 我的系统是后台服务,而不是应用程序,因此我无法为用户提供登录屏幕以批准授权。
我关注此链接以获取访问令牌(无需用户访问): https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service
我通过浏览器调用此链接(手动粘贴),以便批准管理员权限,获得批准筛选和批准的管理员权限: https://login.microsoftonline.com/mycompany.onmicrosoft.com/adminconsent?client_id=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx&state=12345&redirect_uri=https%3A%2F%2Fmyserver.mycompany.com%2Fsugarcrmmaintest%2Fresponse.php
响应网址按计划被调用,我收到了回复。
现在我想获得访问令牌。 根据手册,我一直在调用这段代码,但没有任何反应,我也没有得到回复:
$ clientId =“xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx”; $ clientSecret =“mysecret”; $ responseUri =“https%3A%2F%2Fmyserver.mycompany.com%2Fsugarcrmmaintest%2Fresponse.php”;
$postUrl = "/mycomp.onmicrosoft.com/oauth2/v2.0/token";
$hostname = "login.microsoftonline.com";
$fullurl = "https://login.microsoftonline.com/mycompany.onmicrosoft.com/token";
$headers = array(
"POST " . $postUrl . " HTTP/1.1",
"Host: " . $hostname,
"Content-type: application/x-www-form-urlencoded",
);
$post_params = array(
"client_id" => $clientId,
"scope" => "https%3A%2F%2Fgraph.microsoft.com%2F.default",
"client_secret" => $clientSecret,
"grant_type" => "client_credentials",
);
$curl = curl_init($fullurl);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params);
curl_setopt($curl, CURLOPT_HTTPHEADER, Array("application/x-www-form-urlencoded"));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
我忘记了什么吗?
这是培训页面中的解释:
答案 0 :(得分:1)
https://login.microsoftonline.com/mycompany.onmicrosoft.com/oauth2/v2.0/token
进行测试。当您拨打CURLOPT_HEADER
两次时,您可能会在标题中覆盖它。curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
。答案 1 :(得分:0)
有很多方法可以实现这一目标。以下示例使用Microsoft Graph SDK for PHP
用于PHP的Microsoft Graph SDK不包含任何默认值 认证实施。 thenetworg/oauth2-azure library Guzzle HTTP client 将为您处理标准Oauth2,并为您提供可用的令牌 查询图表。
要作为应用程序进行身份验证,您可以使用此库预安装的thephpleague/oauth2-client,例如:
$guzzle = new \GuzzleHttp\Client();
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/v2.0/token';
$token = json_decode($guzzle->post($url, [
'form_params' => [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'scope' => 'https://graph.microsoft.com/.default',
'grant_type' => 'client_credentials',
],
])->getBody()->getContents());
$accessToken = $token->access_token;
您还可以使用Here对用户进行身份验证并获取访问令牌。
use client_credentials flow是授权代码授予流程示例的示例。但您也可以{{3}}获取它。
请告诉我它是否有帮助!