
✅ **อธิบายโค้ด PHP เชื่อมต่อ Azure AD** โค้ดนี้เป็นกระบวนการ **OAuth 2.0 Authentication** เพื่อให้ PHP รับรองตัวตนของผู้ใช้ผ่าน **Azure Active Directory (Azure AD)** โดยใช้ **Microsoft Identity Platform** ???? **เมื่อผู้ใช้ล็อกอินสำเร็จ ระบบจะดึงข้อมูลช<
Categories: บทความเชิงแสดงบุคลิกภาพ Tags: บทความเชิงแสดงบุคลิกภาพ
### ✅ **อธิบายโค้ด PHP เชื่อมต่อ Azure AD** โค้ดนี้เป็นกระบวนการ **OAuth 2.0 Authentication** เพื่อให้ PHP รับรองตัวตนของผู้ใช้ผ่าน **Azure Active Directory (Azure AD)** โดยใช้ **Microsoft Identity Platform** ???? **เมื่อผู้ใช้ล็อกอินสำเร็จ ระบบจะดึงข้อมูลชื่อ อีเมล และตำแหน่งงานมาแสดง** --- ## ???? **1. โหลด Library และตั้งค่าการเชื่อมต่อ** ```php require 'vendor/autoload.php'; use League\OAuth2\Client\Provider\GenericProvider; session_start(); ``` - `vendor/autoload.php` → โหลดไลบรารีที่ติดตั้งผ่าน Composer (`league/oauth2-client`) - `session_start();` → ใช้ `session` เพื่อเก็บ state ของ OAuth --- ## ???? **2. สร้างตัวแปร `$provider` เพื่อกำหนดค่า OAuth 2.0** ```php $provider = new GenericProvider([ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_CLIENT_SECRET', 'redirectUri' => 'https://yourapp.com/callback', 'urlAuthorize' => 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/authorize', 'urlAccessToken' => 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token', 'urlResourceOwnerDetails' => 'https://graph.microsoft.com/v1.0/me' ]); ``` ???? ค่าที่ต้องตั้ง: - `clientId` → Client ID จาก Azure AD - `clientSecret` → Client Secret จาก Azure AD - `redirectUri` → URL ที่ Azure จะส่ง code กลับมา (ต้องตรงกับที่ตั้งค่าใน Azure) - `urlAuthorize` → ใช้สำหรับ redirect ไปหน้า login ของ Microsoft - `urlAccessToken` → ใช้ขอ **access_token** - `urlResourceOwnerDetails` → ใช้ดึงข้อมูลผู้ใช้จาก **Microsoft Graph API** --- ## ???? **3. ตรวจสอบว่าผู้ใช้เคยล็อกอินหรือยัง** ```php if (!isset($_GET['code'])) { $authUrl = $provider->getAuthorizationUrl(['scope' => 'openid profile email User.Read']); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authUrl); exit; } ``` ???? **อธิบาย** 1. ถ้ายังไม่มี `code` → ให้ redirect ไปที่หน้า **Microsoft Login** 2. `getAuthorizationUrl()` → ใช้สร้าง URL สำหรับให้ผู้ใช้ล็อกอิน 3. ตั้งค่า `scope` ให้ดึงข้อมูล **ชื่อ อีเมล และข้อมูลโปรไฟล์ (`User.Read`)** 4. ใช้ `header('Location: ...')` เพื่อพาผู้ใช้ไปล็อกอิน --- ## ???? **4. รับ Authorization Code และขอ Access Token** ```php $token = $provider->getAccessToken('authorization_code', ['code' => $_GET['code']]); ``` ???? **อธิบาย** - เมื่อผู้ใช้ล็อกอินเสร็จ Microsoft จะส่ง **authorization code** มาให้ - ใช้ `getAccessToken()` เพื่อแลกเปลี่ยน code เป็น **access_token** - **access_token** นี้ใช้เรียก **Microsoft Graph API** เพื่อดึงข้อมูลผู้ใช้ --- ## ???? **5. ดึงข้อมูลผู้ใช้จาก Microsoft Graph API** ```php $owner = $provider->getResourceOwner($token); $userData = $owner->toArray(); ``` ???? **อธิบาย** - `getResourceOwner($token)` → ดึงข้อมูลของผู้ใช้จาก Microsoft - แปลงข้อมูลเป็น array ด้วย `toArray()` --- ## ???? **6. แสดงข้อมูลผู้ใช้** ```php echo "
ข้อมูลผู้ใช้จาก Azure AD
"; echo "ชื่อ: " . htmlspecialchars($userData['displayName']) . "
"; echo "อีเมล: " . htmlspecialchars($userData['mail']) . "
"; echo "ตำแหน่งงาน: " . htmlspecialchars($userData['jobTitle']) . "
"; echo "เบอร์โทรศัพท์: " . htmlspecialchars($userData['mobilePhone']) . "
"; ``` ???? **อธิบาย** - `displayName` → ชื่อของผู้ใช้ - `mail` → อีเมลของบัญชี Microsoft - `jobTitle` → ตำแหน่งงานของผู้ใช้ - `mobilePhone` → เบอร์โทรศัพท์ (ถ้ามี) --- ## ???? **7. จัดการข้อผิดพลาด** ```php catch (Exception $e) { echo "เกิดข้อผิดพลาด: " . $e->getMessage(); } ``` ???? **อธิบาย** - ถ้าเกิดข้อผิดพลาด เช่น **Token ไม่ถูกต้อง**, **เซิร์ฟเวอร์ Microsoft ไม่ตอบสนอง** - ระบบจะแสดงข้อความแจ้งเตือน --- ## ✅ **ตัวอย่าง Response ที่ได้จาก Microsoft** ### 1️⃣ **เมื่อขอ `access_token`** ```json { "token_type": "Bearer", "scope": "openid profile email User.Read", "expires_in": 3600, "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU...", "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6I...", "refresh_token": "0.AAAA...." } ``` ### 2️⃣ **เมื่อดึงข้อมูลผู้ใช้จาก Microsoft Graph API (`/me`)** ```json { "id": "e1b9a3d0-9f3a-4f52-b8a5-xxxxxxxxxxxx", "displayName": "John Doe", "givenName": "John", "surname": "Doe", "userPrincipalName": "johndoe@example.com", "mail": "johndoe@example.com", "jobTitle": "Software Developer", "mobilePhone": "+1234567890", "officeLocation": "Headquarters", "preferredLanguage": "en-US" } ``` --- ## ✅ **สรุปขั้นตอนการทำงาน** 1. **ตรวจสอบว่า** `$_GET['code']` มีค่าหรือไม่ 2. **ถ้ายังไม่มี `code`** → Redirect ไปที่ Microsoft Login 3. **ถ้าได้รับ `code`** → ใช้เพื่อขอ **access_token** 4. **ดึงข้อมูลผู้ใช้** จาก **Microsoft Graph API** 5. **แสดงผลข้อมูล** เช่น **ชื่อ อีเมล ตำแหน่งงาน** --- ## ✅ **สิ่งที่ต้องแก้ไขก่อนใช้งานจริง** ???? **เปลี่ยนค่า** - `'YOUR_CLIENT_ID'` - `'YOUR_CLIENT_SECRET'` - `'YOUR_TENANT_ID'` - `'https://yourapp.com/callback'` (URL ของเว็บที่ใช้จริง) ???? **ตั้งค่าใน Azure AD** - ลงทะเบียนแอปใน **Azure Portal** - ให้สิทธิ์ API **User.Read** --- ## ???? **เพิ่มเติม** - **ถ้าต้องการให้ผู้ใช้ล็อกเอาต์** - ใช้ URL: ``` https://login.microsoftonline.com/common/oauth2/v2.0/logout ``` - **ถ้าต้องการดึงรูปโปรไฟล์ผู้ใช้** - เรียก API: ``` https://graph.microsoft.com/v1.0/me/photo/$value ``` --- **???? สรุป:** - ใช้ **OAuth 2.0** ผ่าน **Microsoft Identity Platform** - รับรองตัวตนผ่าน **Azure AD** - ดึงข้อมูลผู้ใช้ด้วย **Microsoft Graph API** - ใช้งานได้กับ **PHP Framework** เช่น Laravel หรือ CodeIgniter- ผู้ลงข้อมูล
- Comments
- เข้าชม
- วันที่ลงข้อมูล 2025-02-10 10:53:34