Active Directory OAuth 2.0-通过不同于浏览器请求的PHP请求授权代码
我遵循以下文档: 在“请求授权代码”下,它给出了一个涉及OAuth 2.0端点的示例代码。我已遵循此结构,根据自己的要求: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
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周内完成。