php:简单的azure登录信息

php:简单的azure登录信息,php,azure,login,single-sign-on,Php,Azure,Login,Single Sign On,您好,我有一个用PHP编写的应用程序,使用MySQL作为数据库后端,我想使用来自AD azure的登录身份验证 我在谷歌搜索中发现了几个文件示例,但它们对于我的需求来说太复杂了 所以,我有一个这样的链接:https://login.microsoftonline.com/common/oauth2/authorize?client_id=$myidclient&redirect\u uri=$mydirapp&response\u type=code 登录失败后,我将被重定向到/mydirapp

您好,我有一个用PHP编写的应用程序,使用MySQL作为数据库后端,我想使用来自AD azure的登录身份验证

我在谷歌搜索中发现了几个文件示例,但它们对于我的需求来说太复杂了

所以,我有一个这样的链接:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=$myidclient&redirect\u uri=$mydirapp&response\u type=code

登录失败后,我将被重定向到
/mydirapp/index.php
,并带有一个名为codehttpget

我的问题:(在我的index.php文件中)我想得到
-用于此身份验证的
电子邮件地址
-此用户的
firstname
lastname

我知道我需要一个来自这个名为“code”的GET值的令牌
出于这个原因,我可以问我的广告。

关于你的登录失败的事,我不太清楚。实际上,Azure AD使用OAuth 2.0 grand flow实现对用户的身份验证和授权

您提供的url是生成身份验证代码的第一步,然后您将用户定向到此端点,如果身份验证失败,它将不会重定向到您的uri。错误消息将在IDP页面中显示给用户

如果您的用户已使用code参数重定向到您的uri,则表示此用户已成功登录Azure AD

身份验证后,用户需要在服务器的
授权
请求头中设置
访问\u令牌
。如果要获取已验证用户的信息,可以尝试使用以下代码段:

$headers = getallheaders();
$token = (explode(' ',$headers['Authorization']))[1];
list($headb64, $bodyb64, $cryptob64) = explode('.',$token);
$payload = json_decode(base64_decode($bodyb64));

echo $payload->{'family_name'};
echo $payload->{'given_name'};
echo $payload->{'upn'}; //email
有关有效负载中支持的声明,请参阅


如有任何进一步的问题,请随时通知我。

关于您的登录失败的事,我不太清楚。实际上,Azure AD使用OAuth 2.0 grand flow实现对用户的身份验证和授权

您提供的url是生成身份验证代码的第一步,然后您将用户定向到此端点,如果身份验证失败,它将不会重定向到您的uri。错误消息将在IDP页面中显示给用户

如果您的用户已使用code参数重定向到您的uri,则表示此用户已成功登录Azure AD

身份验证后,用户需要在服务器的
授权
请求头中设置
访问\u令牌
。如果要获取已验证用户的信息,可以尝试使用以下代码段:

$headers = getallheaders();
$token = (explode(' ',$headers['Authorization']))[1];
list($headb64, $bodyb64, $cryptob64) = explode('.',$token);
$payload = json_decode(base64_decode($bodyb64));

echo $payload->{'family_name'};
echo $payload->{'given_name'};
echo $payload->{'upn'}; //email
有关有效负载中支持的声明,请参阅


如有任何进一步的问题,请随时通知我。

Hi@kadel,您现在有任何更新吗?Hi@kadel,您现在有任何更新吗?