【发布时间】:2019-07-06 19:55:03
【问题描述】:
我正在尝试为我的网站实现一个非常简单的“使用 Microsoft 登录”按钮。我已经有一个功能正常的 Google 按钮,并想模仿这种行为。简单地说,它应该让用户登录到 Microsoft(使用由带有 Office 365 的学校颁发的那种托管 Microsoft 帐户),然后为我的应用程序提供电子邮件地址和名称。
但是,我很难找到正确的端点以在登录后返回基本用户信息。
我已成功向https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=... 请求授权码并将其返回给我的应用程序。然后我也能够成功地使用https://apis.live.net/v5.0/me?access_token=... 返回所需的数据。但是,这仅适用于个人 Live 帐户,不适用于专业的 Office 365 帐户。
基本上,是否有人知道我可以将授权代码发送到的正确端点,该端点将返回附加到 Office 365 帐户的电子邮件地址和名称?我尝试了https://login.windows.net/common/openid/userinfo,使用下面的 curl 请求,但只收到“1”作为响应。
$url = "https://login.windows.net/common/openid/userinfo" ;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Authorisation: Bearer $access_token"));
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
【问题讨论】:
-
您的意思是要获取用户列表吗?或特定的用户信息?你可以得到
https://graph.microsoft.com/v1.0/usersUser List和https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}Specific user -
你可以参考这个文档php example
-
@md 我至少想要他们的电子邮件地址,但最好还有他们的名字。我怎么能在不知道他们的 id 或用户名的情况下使用第二个?我所拥有的只是他们登录时的令牌
-
我明白在这种情况下,您可以使用
https://graph.microsoft.com/v1.0/me。您需要做的就是将您收到的令牌传递给登录用户。如果您需要,我可以为您添加 C# 示例,因为我对 php 不是很熟悉。 -
@MdFaridUddinKiron 谢谢。我想我已经破解了。主要问题(以及一些愚蠢的拼写错误)是我试图使用
id_token而不是access_token来定位端点。我在这里成功地关注了这篇文章:massivescale.com/microsoft-v2-endpoint-primer
标签: php oauth oauth-2.0 microsoft-graph-api