Thuta Learning
Digital Privacy & Modern Security
AdvancedSecurityintermediate

Authentication နှင့် Authorization ကို အသေးစိတ်လေ့လာခြင်း

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Authentication နှင့် Authorization ကို အသေးစိတ်လေ့လာခြင်း concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram/checklist ကို ဖတ်ပြီး threat/control/decision ဘယ်လို ဆက်စပ်နေသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် digital life (သို့) developer workflow မှာ ဘယ်လို အသုံးချသင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Authentication နဲ့ authorization ဆိုတာ အသံထွက်တူသလို ခံစားရပေမယ့် လုံးဝကွဲပြားတဲ့ မေးခွန်းနှစ်ခုကို ဖြေဆိုနေတာပါ။

Authentication က "သင်ဘယ်သူလဲ" ဆိုတဲ့ မေးခွန်းကို ဖြေတယ်—password၊ passkey၊ (သို့) valid session token ဖြင့် identity ကို သက်သေပြတာပါ။

Authorization ကတော့ ဒီ identity က ဒီ resource အပေါ် အခုချိန်မှာ ဘာလုပ်ခွင့်ရှိလဲဆိုတာကို ဖြေတယ်။ တစ်ခုကျော်တာနဲ့ တခြားတစ်ခုကို အလိုလို မရရှိဘူး။

GET /users/123 ကို စဉ်းစားကြည့်ပါ။ login ဝင်ထားတယ်ဆိုတာနဲ့ user တိုင်းရဲ့ data ကို ကြည့်ခွင့်ရတာ မဟုတ်ဘူး။

Insecure Direct Object bug

login ဝင်ထားတဲ့ user တစ်ဦးက URL ထဲက ID ကို ပြောင်းပြီး တခြားသူ့ private data ကို မြင်နိုင်ရင်၊ authentication ပြီးပြည့်စုံစွာ အလုပ်လုပ်ခဲ့ပေမယ့် authorization ကျရှုံးသွားတာပါ။

ဒီနှစ်ခုကို အစဉ်လိုက် သီးခြားစစ်ဆေးရမည့် gate နှစ်ခုအဖြစ် သဘောထားပါ။ Authentication က identity ကို တစ်ကြိမ်တည်း အတည်ပြုပြီး authorization ကတော့ resource၊ action တစ်ခုချင်းစီအတွက် ပြန်လည်အကဲဖြတ်ရမယ်။

Authentication
user ဘယ်သူဖြစ်တယ်ဆိုတာ password၊ passkey၊ (သို့) valid session token လို credential ကို စစ်ဆေးခြင်းဖြင့် အတည်ပြုသည့် လုပ်ငန်းစဉ်။
Authorization
identity အတည်ပြုပြီးသား user တစ်ဦးက ဘာလုပ်ခွင့်ရှိသည်ကို resource၊ action တစ်ခုချင်းစီအလိုက် ဆုံးဖြတ်သည့် လုပ်ငန်းစဉ်။
text
AUTHENTICATION VS AUTHORIZATION
-------------------------------
REQUEST
   |
   v
[AUTHENTICATION]   <- who are you?
   |
   | pass (identity confirmed)
   v
[AUTHORIZATION]    <- allowed to do THIS, on THIS resource?
   |
   +-- pass --> ALLOW (proceed)
   |
   +-- fail --> DENY (403, even though logged in)

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

အောက်က function က နှစ်ခုသီးခြား gate flow ကို ပကတိ runnable code အဖြစ် တင်ပြထားတယ်—boolean တစ်ခုတည်းအဖြစ် ပေါင်းမစဉ်းစားဘဲ gate တစ်ခုစီကို သီးခြားစစ်ဆေးတယ်။

Authentication fail ရင် function ချက်ချင်းရပ်ပြီး authorization ကို ကြည့်တောင် မကြည့်ဘဲ DENY ကို ပြန်ပေးတယ်။

Case 1 — owner မှား

User 456 က user 123 ပိုင်တဲ့ resource ကို တောင်းတယ်။ Authentication ကျော်ပေမယ့် authorization မှန်ကန်စွာ fail: DENY.

Case 2 — owner မှန်

user တစ်ယောက်တည်းက သူ့ resource ကိုယ်တိုင် တောင်းတယ်။ gate နှစ်ခုစလုံး ကျော်: ALLOW.

check နှစ်ခုကို structurally သီးခြားထား၊ output ထဲမှာလည်း result သီးခြားစီပြထားခြင်းက ဒီ bug ကို production မရောက်ခင် ဖမ်းမိစေတယ်။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
function checkAccess(request) {
  const authResult = request.isAuthenticated
    ? { gate: "authentication", passed: true }
    : { gate: "authentication", passed: false, reason: "not logged in" };

  if (!authResult.passed) {
    return { authentication: authResult, authorization: null, decision: "DENY" };
  }

  const isOwner = request.requestedResourceOwnerId === request.actualUserId;
  const authzResult = isOwner
    ? { gate: "authorization", passed: true }
    : {
        gate: "authorization",
        passed: false,
        reason: `user ${request.actualUserId} does not own resource owned by ${request.requestedResourceOwnerId}`,
      };

  return {
    authentication: authResult,
    authorization: authzResult,
    decision: authzResult.passed ? "ALLOW" : "DENY",
  };
}

const authenticatedButNotOwner = checkAccess({
  isAuthenticated: true,
  requestedResourceOwnerId: 123,
  actualUserId: 456,
});

const fullyAuthorized = checkAccess({
  isAuthenticated: true,
  requestedResourceOwnerId: 123,
  actualUserId: 123,
});

console.log("Case 1 - authenticated but not the owner:");
console.log(JSON.stringify(authenticatedButNotOwner, null, 2));
console.log("\nCase 2 - authenticated and owns the resource:");
console.log(JSON.stringify(fullyAuthorized, null, 2));
You should see
Case 1 - authenticated but not the owner:
{
  "authentication": {
    "gate": "authentication",
    "passed": true
  },
  "authorization": {
    "gate": "authorization",
    "passed": false,
    "reason": "user 456 does not own resource owned by 123"
  },
  "decision": "DENY"
}

Case 2 - authenticated and owns the resource:
{
  "authentication": {
    "gate": "authentication",
    "passed": true
  },
  "authorization": {
    "gate": "authorization",
    "passed": true
  },
  "decision": "ALLOW"
}

၅ မိနစ် စမ်းကြည့်

checkAccess ကို "admin" ဆိုတဲ့ တတိယ role တစ်ခုအတွက် ချဲ့ကြည့်ပါ—admin ဆိုရင် ownership မစဉ်းစားဘဲ resource မည်သည့်ကိုမဆို authorize ဖြစ်ရမယ်။ request object ထဲမှာ role field တစ်ခု ထည့်ပြီး authorization check ကို ပြင်ကြည့်ပါ၊ ပြီးရင် admin က ပိုင်ဆိုင်မှုမရှိတဲ့ resource ကို ဝင်နိုင်ပေမယ့် ပုံမှန် user က ဆက်လက် ဝင်မရနိုင်ကြောင်း စစ်ဆေးပါ။

သတိလေးတစ်ချက်

"user login ဝင်ထားလား" ဆိုတာသာ စစ်ဆေးပြီး action တိုင်းအတွက် access control ကို ဖုံးလွှမ်းပြီဟု ယူဆခြင်း။

authenticated user က တကယ်ပိုင်ဆိုင်သလား၊ ဝင်ခွင့်ရှိသလားဆိုတာ မစစ်ဆေးဘဲ client ဘက်က resource ID (URL၊ body၊ query string) ကို ယုံကြည်ခြင်း။

နားလည်မှု စစ်ဆေးကြည့်ပါ

user တစ်ဦးက login အောင်မြင်စွာ ဝင်ပြီးနောက် URL ထဲက order ID ကို ပြောင်းပြီး တခြားသူ့ private order history ကို ကြည့်ကြည့်တယ်။ ဘာဖြစ်သင့်လဲ။

OWASP Authorization Cheat SheetDigital Privacy & Modern Security

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • "user login ဝင်ထားလား" ဆိုတာသာ စစ်ဆေးပြီး action တိုင်းအတွက် access control ကို ဖုံးလွှမ်းပြီဟု ယူဆခြင်း။
  • authenticated user က တကယ်ပိုင်ဆိုင်သလား၊ ဝင်ခွင့်ရှိသလားဆိုတာ မစစ်ဆေးဘဲ client ဘက်က resource ID (URL၊ body၊ query string) ကို ယုံကြည်ခြင်း။
  • ဒီ course က Cybersecurity Basics course အသစ် မဟုတ်ပါ — password/2FA/phishing/malware/encryption/backup အခြေခံကို Cybersecurity tutorial ကနေ လေ့လာပြီးသားလို့ ယူဆထားပါတယ်။ ဒီ course က Passkeys, Public Wi-Fi/VPN, Browser Security, Privacy, developer-focused Auth/API security, AI security လို အသစ်ထပ်ဖြည့်တဲ့ အပိုင်းကိုသာ သင်ပေးပါတယ်။

လေ့ကျင့်ခန်း

checkAccess ကို "admin" ဆိုတဲ့ တတိယ role တစ်ခုအတွက် ချဲ့ကြည့်ပါ—admin ဆိုရင် ownership မစဉ်းစားဘဲ resource မည်သည့်ကိုမဆို authorize ဖြစ်ရမယ်။ request object ထဲမှာ role field တစ်ခု ထည့်ပြီး authorization check ကို ပြင်ကြည့်ပါ၊ ပြီးရင် admin က ပိုင်ဆိုင်မှုမရှိတဲ့ resource ကို ဝင်နိုင်ပေမယ့် ပုံမှန် user က ဆက်လက် ဝင်မရနိုင်ကြောင်း စစ်ဆေးပါ။

You'll know it worked when: Case 1 - authenticated but not the owner: { "authentication": { "gate": "authentication", "passed": true }, "authorization": { "gate": "authorization", "passed": false, "reason": "user 456 does not own resource owned by 123" }, "decision": "DENY" } Case 2 - authenticated and owns the resource: { "authentication": { "gate": "authentication", "passed": true }, "authorization": { "gate": "authorization", "passed": true }, "decision": "ALLOW" }

Authentication နှင့် Authorization ကို အသေးစိတ်လေ့လာခြင်း | Thuta Learning