[英]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 請求來獲取訪問令牌:
請檢查此PHP 測試項目以供參考
方法2 :
請參考這個 github 代碼: https ://github.com/CoasterKaty/PHPAzureADoAuth
試試這些步驟
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.