enter image description here enter image description here Here are the methods I tried using the Microsoft Graph API and their respective outcomes:

方法一:

  • 单点登录(SSO)后,我们获得访问令牌.
  • 此访问令牌用作Graph API集成的承载令牌.
    public function redirectToMicrosoft(){
        return Socialize::driver('graph')->scopes(['offline_access'])->redirect();
        }

    public function handleMicrosoftCallback(){   
        $user = Socialize::driver('graph')->user();
        return $user->access_token;
    }

方法二:

  • 根据租户ID和指定参数获取访问令牌.
  • 使用获得的访问令牌.

    public function getAccessToken()
    {
        $tenantId = env('MICROSOFT_TENANT_ID');
        $clientSecret = env('MICROSOFT_CLIENT_SECRET');
        $clientId = env('MICROSOFT_CLIENT_ID');        
    
        $input = [
            'grant_type' => 'client_credentials',
            'client_id' => $clientId,
            'scope' =>"https://graph.microsoft.com/.default",
            'client_secret' => $clientSecret,
        ];
      
        $client = new Client();
        $response = $client->request('POST', "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token", ['form_params' => $input]);
     
        $statusCode = $response->getStatusCode();
        $responseBody = json_decode($response->getBody(), true);
    
        $this->accessToken = $responseBody['access_token'];
        return $responseBody;
    }

最新情况:

Kindly find the permission below, enter image description here

try 使用Azure AD配置的邮箱登录时,这涉及注册邮箱地址以获取客户端和密码.我得到了代码,访问令牌API工作得很好.

enter image description here

try 使用不同的Outlook邮件登录时,出现以下错误.请参考截图,

enter image description here

CODE个 0.AS4AgI6YLYeIu0eXbgo3fHk6PszspcPofddJs-W7b5ajEO-5AC8.AgABAAIAAAAmoFfGtYxvRrNriQdPKIZ-AgDs_wUA9P-kBJSNPkGJJsNJgB510cZ69mO3JTSYLh89i4PpBhv1Y8L0nk51BFcTUh7bEe2i5dC24W1eeEqsOCuGKJcUYbmfdHCKHkpnaUBAFoHsIGhyydpHwMvezF4pAnL8_-OxgJeM-xPaj3WFxqZfEvwP6R4TFxQ4IP5hovS1erTxlMCS63dA9hdL7jbkpDHjrp3wgqs01zRt_q5RAPCH4KtRGtirnMnll-3PSEkcLixKUQkeC261Z_0JsK5aGRidAv0IFNs_nw5cPtowTEuEiv99EJZQLJbt7qLOhz0DIPBBeBhpJl2bi6OsdOV4UZ59eQafOEanxA-5_pC6gy3H3nc9kiVfPddlneBXKGbFbaoXHyl9hi_i7bzNcJDubNteM2TQETYy7VgnoRpNEbh_eOZNV4T1rVtr8h5F4fxg9MaWkmQog8s9dxtDwY4MCYq9UBb1tVTeOlm38w3oyQWR-3ZCbD8wV4IZV3TEzrqJfhURm8E_cgcgTLdzOm-8uK9f-E0NAC4aodqXf_V3d8wLtR6QJi-WNOKlB-8THR-WNuMZvBcZiL38h_zToPbgwnL0fSRfsuoU57kwE8t30HpcDzRq2PilxgdDjoGolStRNEv-RDrgTS-66EewjHevBwbU_5A0nSfNzjhksl5NQfuEdnoRSZ3QTH4jwLgzIZ3aSkwphkoRtDJRa_Ri1U8PdAzolRl2SlJIYp7sqvIfpPL9SSRgEA6ftusb8seE9gEcGXKvvRFEQza4KgrsC9NHNMQunJFlQxbb5Y1SpdgRWC9BsK7oIGgegj5F4CKoBgKqlaOmis2I_QvZxVil5KSq4zft&state=12345&session_state=9c29347d-1351-48c8-90dc-c1ab380a6221

推荐答案

请注意,您cannot使用client credentials流生成的令牌来获取个人Outlook日历事件.

您需要通过授予100端点的委托权限来切换到delegated流,就像授权码流一样.

在我的例子中,我注册了一个低于account typemulti-tenant应用程序,它允许组织和个人Microsoft帐户:

enter image description here

现在,我在该应用程序中授予了Delegated类型的100权限,如下所示:

enter image description here

最初,我在登录后显示同意屏幕的浏览器中跑到了authorization request以下:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize? 
client_id=appId
&redirect_uri=https://jwt.ms
&response_type=code  
&response_mode=query  
&scope=https://graph.microsoft.com/.default
&state=12345

enter image description here

接受同意后,我在地址栏中获得了授权100的值:

enter image description here

现在,我通过postman 使用授权码流生成了access token,参数如下,包括100值:

POST https://login.microsoftonline.com/tenantId/oauth2/v2.0/token
grant_type: authorization_code
client_id: appId 
client_secret: secret 
scope: https://graph.microsoft.com/.default
code: paste_code_from_above
redirect_uri: https://jwt.ms

Response:个个

enter image description here

当我使用这个令牌来获取个人Outlook日历用户的事件时,我成功获取了response,如下所示:

GET https://graph.microsoft.com/v1.0/me/events

Response:个个

enter image description here

如果您try 使用普通Azure AD用户帐户列出或创建事件,请确保为该用户分配Active Office 365 license.

UPDATE:

请注意,如果在令牌参数中传递invalid个值,通常会出现错误Invalid request. Request is malformed or invalid.

在生成令牌时,我在100参数中传递了invalidextra个字符,得到了same error,如下所示:

enter image description here

要解决该错误,应从code参数中删除此部件&state=12345&session_state=9c29347d-1351-48c8-90dc-c1ab380a6221

您的有效100值应为:

enter image description here

Php相关问答推荐

PHP DOMDocument忽略第一个表S结束标记

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

使用.htaccess将任何路由重定向到文件

使用WordPress wp_mail()的邮箱标题无效

如何使用这种格式构建XML?

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

在PHP 8.2 Gloogle云引擎上加载大型php文件速度缓慢

限制联系人页面仅允许在WooCommerce中登录的用户

Laravel Http::get not working on controller

随机显示WordPress快捷代码功能时出现问题

如何使用 PHP 创建简化的 twig 替换?

在具有Angular 的 Laravel 应用程序中,不显示图像

如何使用 AJAX、PHP 和 MYSQL 在 Select 项目时在文本框中填充数据

WooCommerce 中一件免费产品的数量折扣

如何判断php中wordpress路径之外的文件夹是否存在?

Google Drive API:为什么使用服务帐户在下载文件时会将我带到 Google Drive 登录窗口?

Symfony:指定 data_class 时,提交的表单获取初始化前不得访问

提交仅包含活动详细信息选项卡表单的主表单

如何在自定义消息中包含 WooCommerce 选定的产品变体详细信息

为什么在解压缩具有混合字符串和 int 键的关联数组时出现错误消息无法使用位置参数...?