Mọi người đang học về xác thực, OIDC, hoặc muốn tích hợp Microsoft Entra ID (Azure AD) vào app web thì đây là tutorial cơ bản, triển khai nội bộ trên Ubuntu nha!
Nói sơ một chút về flow xác thực ( tham khảo hình nhé )
- User → Web App: Người dùng truy cập ứng dụng web.
- Web App → Entra ID: Ứng dụng chuyển hướng người dùng đến Microsoft Entra ID (Identity Provider) để đăng nhập.
- User Authenticates: Người dùng nhập thông tin đăng nhập tại Entra ID.
- Entra ID → Web App: Sau khi xác thực thành công, Entra ID trả về Authorization Code cho ứng dụng.
- Web App → Token Endpoint: Ứng dụng gửi mã code này đến token endpoint của Entra ID để đổi lấy token.
- Nhận Tokens: Entra ID trả về ID Token (xác định danh tính), Access Token (truy cập API), và có thể có Refresh Token.
Yêu cầu:- Ubuntu (Server hoặc Desktop)
- Node.js + npm
- Tài khoản Azure (Entra ID)
- SSL tự ký để chạy HTTPS
Các bước thực hiện:
Tạo App trên Azure→ Vào portal.azure.com
→ App Registrations → New registration
→ Chọn kiểu: Single tenant
→ Redirect URI:
https://<your-server-ip>:3000/auth/callback
Lưu ý: bạn có thể dùng ngrok để host ra public IP.
Lấy thông tin cấu hình→ Lưu lại:
- Client ID
- Tenant ID
- Client Secret
Tạo project Node.jsmkdir myentraapp && cd myentraapp
npm init -y
npm install express express-session passport passport-azure-ad
Code app.js→ Sử dụng Passport + OIDC Strategy
→ Cấu hình callback /auth/callback và login /login
→ Dùng HTTPS với cert tự ký (openssl)
Tạo chứng chỉ tự kýmkdir certs && cd certs
openssl req -nodes -new -x509 -keyout server.key -out server.cert -days 365
CN nhập: localhost
Test flow:- Mở https://<your-ip>:3000
- Nhấn Login with Entra ID
- Đăng nhập bằng tài khoản Microsoft (thuộc tenant) → OK
- Vào Azure → Users → Sign-in logs để kiểm tra
Đăng nhập tài khoản ngoài tenant → sẽ báo lỗi (vì chọn Single-tenant)