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

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

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