Active Directory中的OAuth 2.0 - 请求通过PHP比浏览器请求

问题描述:

不同的授权码,我下面这个文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-codeActive Directory中的OAuth 2.0 - 请求通过PHP比浏览器请求

下,请求授权码,它提供了一个参与端点OAuth 2.0一个示例代码。我已经按照这个结构,立足我对自己的要求大致如下:

https://login.microsoftonline.com/{tenant}/oauth2/authorize? 
client_id=6731de76-14a6-49ae-97bc-6eba6914391e 
&response_type=code 
&redirect_uri=https://example.com 
&response_mode=query 
&resource=6731de76-14a6-49ae-97bc-6eba6914391e 
&state=12345 

在我的测试中,我甚至试过(获得请求裸露地):

https://login.microsoftonline.com/{tenant}/oauth2/authorize? 
client_id=6731de76-14a6-49ae-97bc-6eba6914391e 
&response_type=code 

这里的有趣事情:如果我通过浏览器访问这些域,它们返回一个“成功”的号召,像这样:

https://example.com/?code=AOA................................... 

不过,我似乎无法得到这个SAM e结果(获取代码)通过PHP解决方法。

我已经试过:

file_get_contents($my_url); 

但所有的返回是一个错误,微软的一个登录页面。我也试过cURL,但没有运气。

任何人都可以建议如何复制获得这样的代码(自动)?

的需要在这里是访问的API为用户以后也是如此。

当您兑换授权码时,您将获得访问令牌和刷新令牌。您附加到API调用的访问令牌,默认在1小时后过期。但刷新令牌默认在14天内过期,并且可用于获取新的访问令牌和刷新令牌。所以只要您使用刷新令牌在14天内获得新的令牌,您就可以永久访问。

每次刷新时都会检查用户的访问权限,因此,如果他们的帐户被禁用或访问权限被删除,您将收到错误而不是新的令牌。


简答:你不能。要获得授权码,您必须重定向浏览器,以便用户可以登录,必要时通过MFA,登录其组织本地AD ...作为最终结果,用户将被发送回您的应用程序代码,然后您可以将其访问令牌兑换为您想调用的受Azure AD保护的API。

+0

是否有无论如何传递用户/传递凭据自动登录,然后被重定向到与代码页面? – NoReceipt4Panda

+0

您可以在重定向时将用户名作为参数传入,但不能传入密码。 – juunas

+0

其实,更好的问题 - 当请求一个'access_token'时,一个'refresh_token'附带了它。有人不能继续使用'refresh_token'来持续访问吗? – NoReceipt4Panda

您可以通过使用header()函数重定向用户到微软的登录页面发送HTTP Location头:

header("Location: https://login.microsoftonline.com/xxxxxx/oauth2/authorize?client_id=xxxxxx&response_type=code&redirect_uri=http%3A%2F%2Flocalhost:8088/testauth.php%2F&response_mode=query&resource=https%3A%2F%2Fgraph.windows.net%2F&state=12345"); 

用户输入用户名/密码后,蔚蓝的广​​告会重定向到重定向网址的代码,你可以通过获取代码:

echo $_GET['code'];