Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Active Directory OAuth 2.0-通过不同于浏览器请求的PHP请求授权代码_Php_Azure_Oauth 2.0_Azure Active Directory - Fatal编程技术网

Active Directory OAuth 2.0-通过不同于浏览器请求的PHP请求授权代码

Active Directory OAuth 2.0-通过不同于浏览器请求的PHP请求授权代码,php,azure,oauth-2.0,azure-active-directory,Php,Azure,Oauth 2.0,Azure Active Directory,我遵循以下文档: 在“请求授权代码”下,它给出了一个涉及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

我遵循以下文档:

在“请求授权代码”下,它给出了一个涉及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...................................
然而,我似乎无法通过PHP解决方案获得相同的结果

我试过:

file_get_contents($my_url);
但返回的只是一个错误和Microsoft的登录页面

我也试过卷发,但运气不好


是否有人可以建议如何复制自动获取此类代码?

您可以使用header函数将用户重定向到microsoft登录页,以发送HTTP位置标头:

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"); 
用户输入用户名/密码后,azure ad将重定向到带有代码的重定向url,您可以通过以下方式获取代码:

echo $_GET['code']; 

这里需要的是以后作为用户访问API

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

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


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

是否需要传入用户/传递凭据以自动登录,然后使用代码重定向到页面?重定向时,您可以传入用户名作为参数,但不能传入密码。实际上,更好的问题-当请求访问令牌时,会附带刷新令牌。有人不能继续使用refresh_令牌来持续访问吗?当然,当您使用refresh令牌时,您会得到一个新的refresh toke和access令牌。对了,技术上的refresh令牌通过自定义策略默认在14天内过期,最多90天。但你可以得到新的刷新令牌,只要总是在2周内完成。