บทความ

✅ **อธิบายโค้ด 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

บัญชี Azure และสิทธิ์ในการเข้าถึง Azure AD<

Categories: บทความเชิงสาธิตวิธีการ Tags: บทความเชิงสาธิตวิธีการ

PHP ทำงานร่วมกับ Azure Active Directory (Azure AD) สำหรับการล็อกอินหรือรับรองตัวตนของผู้ใช้ คุณสามารถใช้ OAuth 2.0 และ Microsoft Identity Platform ได้

### ✅ สิ่งที่ต้องเตรียม
1. บัญชี Azure และสิทธิ์ในการเข้าถึง Azure AD
2. แอปพลิเคชันที่ลงทะเบียนใน Azure AD
3. PHP SDK สำหรับการรับรองตัวตน (เช่น `league/oauth2-client`)

### ???? ขั้นตอนการตั้งค่า Azure AD
#### 1. ลงทะเบียนแอปพลิเคชันใน Azure AD
1. ไปที่ Azure Portal → [https://portal.azure.com](https://portal.azure.com)
2. ไปที่ Azure Active Directory → App registrations
3. คลิก + New registration
4. กรอกข้อมูล:
   - Name: ตั้งชื่อแอปพลิเคชัน
   - Supported account types: เลือก "Accounts in this organizational directory only" (ขึ้นอยู่กับการใช้งาน)
   - Redirect URI: ใส่ URL เช่น `https://yourapp.com/callback`
5. คลิก Register
---
#### 2. รับค่า Client ID และ Client Secret
1. หลังจากลงทะเบียนแล้ว ไปที่ App registrations → แอปของคุณ
2. คัดลอกค่า Application (client) ID
3. ไปที่ Certificates & secrets → New client secret
4. ตั้งค่า Description และเลือก Expire time
5. คัดลอกค่า Client Secret (ใช้ครั้งเดียวเท่านั้น!)
---
#### 3. ตั้งค่า API Permissions
1. ไปที่ API permissions → Add a permission
2. เลือก Microsoft Graph
3. เลือก Delegated permissions
4. เพิ่มสิทธิ์ เช่น:
   - `openid`
   - `profile`
   - `email`
   - `User.Read`
5. คลิก Grant admin consent
---
### ???? เขียนโค้ด PHP สำหรับล็อกอินด้วย Azure AD
#### ติดตั้ง OAuth 2.0 Client Library
ใช้ Composer เพื่อติดตั้ง `league/oauth2-client`  

composer require league/oauth2-client
---
#### โค้ด PHP เชื่อมต่อ Azure AD php
<?php
require 'vendor/autoload.php';

use League\OAuth2\Client\Provider\GenericProvider;

session_start();

$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'
]);

if (!isset($_GET['code'])) {
    $authUrl = $provider->getAuthorizationUrl(['scope' => 'openid profile email User.Read']);
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: ' . $authUrl);
    exit;
} else {
    $token = $provider->getAccessToken('authorization_code', ['code' => $_GET['code']]);
    $owner = $provider->getResourceOwner($token);
    echo "Hello, " . htmlspecialchars($owner->getName()) . "!";
}
?>
???? อธิบายโค้ด
เมื่อไม่มี code ใน URL → ระบบจะสร้างลิงก์ให้ไปล็อกอินกับ Azure AD
เมื่อผู้ใช้ล็อกอินเสร็จ → Azure จะส่ง code กลับมา และใช้ OAuth 2.0 ดึงข้อมูลผู้ใช้จาก Microsoft Graph API
--
### ???? ทดสอบระบบ
1. รันเซิร์ฟเวอร์ PHP: sh
   php -S localhost:8000
2. เปิดเบราว์เซอร์ไปที่:
   http://localhost:8000
3. ระบบจะรีไดเร็กต์ไปที่ Azure AD เพื่อให้ผู้ใช้ล็อกอิน
4. เมื่อสำเร็จ ระบบจะแสดงชื่อของผู้ใช้ที่ล็อกอิน
---
### ✅ สรุป
- ใช้ Azure AD OAuth 2.0 สำหรับการรับรองตัวตน
- ลงทะเบียนแอปใน Azure Portal และตั้งค่า Client ID / Secret
- ใช้ไลบรารี `league/oauth2-client` เพื่อเชื่อมต่อกับ Azure AD
- สามารถดึงข้อมูลผู้ใช้ผ่าน Microsoft Graph API

วันนี้เป็นอีกวันที่เต็มไปด้วยความหลากหลายของเหตุการณ์และความรู้สึกที่ผ่านเข้ามาในชีวิต<

Categories: 1บทความเชิงบรรยาย Tags: บทความเชิงบรรยาย

วันนี้เป็นอีกวันที่เต็มไปด้วยความหลากหลายของเหตุการณ์และความรู้สึกที่ผ่านเข้ามาในชีวิต เริ่มต้นเช้าวันนี้ด้วยอากาศที่สดใส แสงแดดอ่อน ๆ สาดส่องผ่านหน้าต่าง สร้างบรรยากาศที่ชวนให้รู้สึกสดชื่น การเริ่มต้นวันใหม่แบบนี้ทำให้รู้สึกมีพลังและพร้อมรับมือกับทุกสิ่งที่จะเกิดขึ้น

เมื่อถึงเวลาสาย ฉันได้เริ่มต้นทำงานที่ได้รับมอบหมาย งานวันนี้ค่อนข้างท้าทาย แต่ก็เป็นโอกาสที่ดีในการพัฒนาทักษะใหม่ ๆ การได้เรียนรู้สิ่งใหม่ ๆ ทำให้รู้สึกตื่นเต้นและมีกำลังใจ ฉันพยายามจัดการกับทุกปัญหาที่เข้ามาด้วยความตั้งใจ และเรียนรู้จากความผิดพลาดเล็ก ๆ น้อย ๆ ที่เกิดขึ้น

ในช่วงพักเที่ยง ฉันได้มีโอกาสออกไปเดินเล่นข้างนอก สูดอากาศบริสุทธิ์และรับแสงแดดอุ่น ๆ การได้ออกจากโต๊ะทำงานมาสัมผัสธรรมชาติช่วยให้สมองปลอดโปร่งและมีสมาธิกลับมาทำงานต่อได้ดีขึ้น

ช่วงบ่ายเป็นช่วงเวลาที่ต้องพบปะกับเพื่อนร่วมงานเพื่อปรึกษาและแลกเปลี่ยนความคิดเห็นในการทำโปรเจ็กต์ การพูดคุยทำให้เราเข้าใจกันมากขึ้นและช่วยหาทางแก้ไขปัญหาได้รวดเร็วขึ้น นอกจากนี้ การได้แลกเปลี่ยนความคิดเห็นยังช่วยให้เห็นมุมมองใหม่ ๆ ที่อาจไม่เคยนึกถึงมาก่อน

เมื่อเข้าสู่ช่วงเย็น งานส่วนใหญ่ก็เสร็จเรียบร้อยตามเป้าหมายที่วางไว้ ฉันรู้สึกภูมิใจในตัวเองที่สามารถจัดการกับงานได้อย่างมีประสิทธิภาพ ช่วงเวลานี้ฉันมักจะใช้เวลาทบทวนสิ่งที่ได้เรียนรู้ในวันนี้ และจดบันทึกประเด็นสำคัญเพื่อพัฒนาตัวเองในอนาคต

หลังจากงานเสร็จ ฉันได้ใช้เวลาส่วนตัวกับกิจกรรมที่ชื่นชอบ เช่น อ่านหนังสือ ฟังเพลง หรือดูรายการโปรดในโทรทัศน์ การได้ผ่อนคลายแบบนี้ทำให้จิตใจสงบและพร้อมสำหรับการพักผ่อน

เมื่อถึงเวลาค่ำ ฉันได้นั่งลงทานอาหารมื้อเย็นกับครอบครัว การได้พูดคุยแลกเปลี่ยนเรื่องราวระหว่างวันเป็นช่วงเวลาที่มีค่าที่สุด เพราะเป็นโอกาสที่เราได้ใกล้ชิดกันและเติมเต็มความอบอุ่นในครอบครัว

สุดท้ายก่อนเข้านอน ฉันได้ใช้เวลาสั้น ๆ ในการทำสมาธิและขอบคุณทุกสิ่งที่เกิดขึ้นในวันนี้ ทั้งสิ่งดีและสิ่งที่เป็นบทเรียน เพราะทุกอย่างล้วนช่วยให้ฉันเติบโตขึ้นอีกก้าวหนึ่ง

วันนี้อาจจะดูเป็นวันธรรมดาสำหรับหลายคน แต่สำหรับฉัน มันคือวันพิเศษที่เต็มไปด้วยความทรงจำและการเรียนรู้ที่มีค่า เป็นอีกวันที่ช่วยเติมเต็มชีวิตให้มีความหมายมากขึ้น และฉันเฝ้ารอคอยวันพรุ่งนี้ที่จะได้เผชิญกับสิ่งใหม่ ๆ อย่างเต็มใจและเต็มพลังอีกครั้ง