簡體   English   中英

我可以在現有的 PHP 應用程序中實施 Azure AD 身份驗證嗎

[英]Can I implement Azure AD Authentication into an existing PHP application

我使用一組現有用戶構建並維護了一個 PHP web 應用程序。 身份驗證是應用程序中的用戶名密碼。

現在需要為大量新用戶提供訪問權限,現有 Azure 個 AD 帳戶。 客戶端希望這些用戶能夠使用他們的 Azure 身份登錄。 現有用戶將繼續按照他們目前的方式進行身份驗證。

我認為這類似於 Facebook/Google 等 SSO,但我正在努力在 Microsoft 資源或任何支持此功能的庫中找到這方面的任何示例。 我描述的是一個有效的用例,並且可以通過 Azuer AD 身份驗證實現嗎?

使用 Microsoft Graph 使用 PHP 進行 Azure AD 身份驗證非常簡單。 我有一個 PHP 頁面作為概念證明,您可以直接將其放在 Azure 應用服務上進行試用。

方法 1:基本上,要從 PHP Web 應用程序通過 Azure AD 訪問資源,您可以參考Web Application to Web API

要將 Azure AD 集成到 PHP Web 應用程序中,我們需要按照授權代碼授予流程步驟來構建多個自定義 HTTP 請求。 EG 要通過 OAuth 2.0 協議獲取訪問令牌,我們應該參考Authorization Code Grant Flow的步驟。 通常,我們會構建 2 個 HTTP 請求來獲取訪問令牌:

  1. 請求授權碼。

在此處輸入圖像描述

  1. 使用授權碼請求訪問令牌: 在此處輸入圖像描述

請檢查此PHP 測試項目以供參考

方法2

請參考這個 github 代碼: https ://github.com/CoasterKaty/PHPAzureADoAuth

試試這些步驟

  1. 創建應用注冊 Azure AD > 應用注冊,然后單擊新建注冊。

在此處輸入圖像描述

2)創建應用注冊后復制客戶端ID租戶ID ,將它們粘貼到config.inc中的_OAUTH_SERVER_OAUTH_CLIENTID _ OAUTH_SERVER條目應該是login.microsoftonline.com URL,但TENANT_ID替換為您的目錄(租戶)ID

在此處輸入圖像描述

3)添加一個新的秘密並選擇合適的時間。 別忘了你需要在它過期之前更新它,所以在你的日歷上做個筆記。 完成后,復制秘密值並將其粘貼到config.inc 中的 _OAUTH_SECRET

4)之后能夠瀏覽到您的應用程序並被提示登錄。在您第一次使用時,系統會要求您允許租戶中的每個人的權限(假設您具有適當的管理員權限)。

在此處輸入圖像描述

注冊 azure 后,您可以參考此代碼進行發布請求

例如:

<?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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM