我可以在现有 PHP 应用程序中实施 Azure AD 身份验证吗

cha*_*une 10 php azure oauth-2.0 azure-active-directory

我与一组现有用户一起构建并维护了一个 PHP Web 应用程序。身份验证是应用程序内的用户名密码。

现在需要使用现有的 Azure AD 帐户向大量新用户提供访问权限。客户端希望这些用户能够使用他们的 Azure 身份登录。现有用户将继续按照目前的方式进行身份验证。

我认为这与 Facebook/Google 等 SSO 类似,但我很难在 Microsoft 资源中找到任何这样的示例,或者任何可以实现此功能的库。我描述的用例是有效的,并且可以通过 Azuer AD 身份验证实现吗?

小智 6

注册azure后,您可以参考此代码进行post请求

例如:

<?php

$appid = "xxx";
$tennantid = "xxx";
$secret = "xxx";
$login_url ="https://login.microsoftonline.com/".$tennantid."/oauth2/v2.0/authorize";

session_start ();

$_SESSION['state']=session_id();

echo '<h2><p>You can <a href="?action=login">Log In</a> with Microsoft</p></h2>';

if ($_GET['action'] == 'login'){
   $params = array (
    'client_id' =>$appid,
    'redirect_uri' =>'https://example/',
    'response_type' =>'token',
    'response_mode' =>'form_post',
    'scope' =>'https://graph.microsoft.com/User.Read',
    'state' =>$_SESSION['state']);

   header ('Location: '.$login_url.'?'.http_build_query ($params));
}

if (array_key_exists ('access_token', $_POST)){
   $_SESSION['t'] = $_POST['access_token'];
   $t = $_SESSION['t'];

   $ch = curl_init ();
   curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Authorization: Bearer '.$t, 'Conent-type: application/json'));

   curl_setopt ($ch, CURLOPT_URL, "https://graph.microsoft.com/v1.0/me/");
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

   $rez = json_decode (curl_exec ($ch), 1);

   if (array_key_exists ('error', $rez)){  
      var_dump ($rez['error']);    
      die();
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

方法1:基本上,要从PHP Web应用程序通过Azure AD访问资源,您可以参考Web应用程序到Web API

\n

要将 Azure AD 集成到 PHP Web 应用程序中,我们需要遵循授权代码授予流程步骤来构建多个自定义 HTTP 请求。EG 要通过 OAuth 2.0 协议获取访问令牌,我们应该参考授权码授予流程上的步骤。一般来说,我们会构建2个HTTP请求来获取访问令牌:

\n
    \n
  1. 请求授权码。
  2. \n
\n

在此输入图像描述

\n
    \n
  1. 使用授权代码请求访问令牌:\n在此输入图像描述
  2. \n
\n

请查看这个 PHP 测试项目 供您参考

\n

方法2

\n

请参考此github代码:https ://github.com/CoasterKaty/PHPAzureADoAuth

\n

尝试执行以下步骤

\n
    \n
  1. 创建应用程序注册 Azure AD > 应用程序注册,然后单击新建注册。
  2. \n
\n

在此输入图像描述

\n

2)创建应用程序注册后复制客户端ID租户ID,将它们粘贴到config.inc中的_OAUTH_SERVER和_OAUTH_CLIENTID中。_ OAUTH_SERVER条目应该是login.microsoftonline.com URL,但将TENANT_ID替换为您的目录(租户)ID

\n

在此输入图像描述

\n

3)添加新的秘密并选择合适的时间。不要\xe2\x80\x99 忘记您需要在过期之前更新它,因此请在日历中记下。完成后,复制秘密值并将其粘贴到config.inc 中的 _OAUTH_SECRET中

\n

4) 之后,能够浏览到您的应用程序并提示登录。第一次登录时,系统会要求您\xe2\x80\x99 授予租户中每个人的权限(假设您具有适当的管理权限)。

\n

在此输入图像描述

\n