OAuth2.0 vs OpenID

OAuth 2.0 และ OpenID Connect (OIDC) เป็น Protocol ที่เกี่ยวข้องกับการ User Authentication กับ แต่มีความเป็น Protocol ที่แพร่หลายและนิยมใช้กันซึ่งสามารถเพิ่ม Security ให้กับ Application ของคุณให้ได้ตาม Security Standard

OAuth 2.0

  • OAuth 2.0 ถูกออกแบบมาเพื่อให้ Client Application สามารถเข้าถึง Resource ของผู้ใช้ใน Server ได้โดยไม่ได้ให้ข้อมูลตัวตนของผู้ใช้ แต่เน้นการให้สิทธิ์แก่ Application ในการเข้าถึงข้อมูลบางส่วน เช่น เข้าถึงไฟล์ รูปภาพ หรือข้อมูลในระบบต่าง ๆ โดยใช้ "Token"

  • หลักการทำงานคือให้สิทธิ์ Application ที่ได้รับการอนุญาตจากผู้ใช้ โดยส่ง "Access Token" ให้ Application ซึ่ง Access Token นี้ใช้เพื่อเรียกข้อมูลจาก Resource Server

  • ตัวอย่างการใช้งาน

    • Application ต้องการเข้าถึงข้อมูลไฟล์ใน Google Drive

      1. ผู้ใช้ เข้าสู่ Application ซึ่ง App ต้องการเข้าถึง File ใน Google Drive ของผู้ใช้

      2. Application ส่งคำขออนุญาตไปที่ Google เพื่อรับสิทธิ์การเข้าถึงไฟล์ของผู้ใช้ (ผ่าน Authorization Server ของ Google)

      3. Google แสดงหน้าให้ผู้ใช้ยืนยันว่า Application สามารถเข้าถึง File ได้หรือไม่

      4. ผู้ใช้ อนุญาตให้ Application เข้าถึงข้อมูล

      5. Google ส่ง Authorization Code กลับมาให้ Application

      6. Application นำ Authorization Code ไปขอแลกเป็น Access Token จาก Google

      7. Google ส่ง Access Token กลับมา

      8. Application นำ Access Token ไปเรียกข้อมูล File จาก Google Drive API

      9. Google Drive ตรวจสอบ Access Token ว่ามีสิทธิ์หรือไม่ และส่งข้อมูลไฟล์กลับไปให้ Application

  • ตัวอย่าง Request

POST /oauth2/token
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&redirect_uri=https://oauth2.example.com/callback&client_id=your_client_id&client_secret=your_client_secret
  • ตัวอย่าง Response

{
  "access_token": "ya29.A0ARrdaM...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "1dsf20gJY8"
}
  • ตัวอย่าง Sequence diagram

OpenID Connect (OIDC)

  • OIDC เป็นส่วนขยายของ OAuth 2.0 โดยเพิ่ม Function การตรวจสอบตัวตนเข้าไป นอกเหนือจากการอนุญาต OIDC ช่วยให้ Application สามารถยืนยันตัวตนของผู้ใช้ได้ (เช่น รู้ว่าใครคือผู้ใช้นั้นจริงๆ) โดยใช้ "ID Token" เพื่อระบุข้อมูลตัวตนของผู้ใช้

  • หลักการทำงานคือนอกจาก Access Token ที่ได้จาก OAuth 2.0 แล้ว OIDC ยังเพิ่ม "ID Token" ซึ่งใช้สำหรับบอกข้อมูลตัวตนของผู้ใช้ เช่น ชื่อ, อีเมล, หรือรหัสผู้ใช้ในระบบได้อย่างปลอดภัย

  • ตัวอย่างการใช้งาน

    • Application ต้องการตรวจสอบตัวตนผู้ใช้ผ่านการ Login ด้วย Google

      1. ผู้ใช้ เข้าสู่ Application ซึ่งต้องการให้ผู้ใช้ Login ด้วย Google (เช่น "Sign in with Google")

      2. Application ส่งคำขอไปยัง Google เพื่อให้ผู้ใช้ Login ผ่าน Google

      3. Google แสดงหน้าให้ผู้ใช้ Login

      4. ผู้ใช้ กรอกข้อมูล Login และยืนยัน

      5. Google ส่ง Authorization Code กลับไปให้ Application

      6. Application นำ Authorization Code ไปขอแลกเป็น ID Token และ Access Token จาก Google

      7. Google ส่ง ID Token และ Access Token กลับไปให้ Application

      8. Application ใช้ ID Token เพื่อตรวจสอบตัวตนของผู้ใช้ว่าใครคือผู้ใช้ (ข้อมูลภายใน ID Token จะมีข้อมูลเช่น ชื่อผู้ใช้, อีเมล, หรือรหัสผู้ใช้ในระบบ)

      9. Application แสดงข้อมูลหรือให้บริการตามสิทธิ์ที่ผู้ใช้ได้อนุญาต

  • ตัวอย่าง Request

POST /oauth2/token
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&redirect_uri=https://oauth2.example.com/callback&client_id=your_client_id&client_secret=your_client_secret
  • ตัวอย่าง Response

{
  "access_token": "ya29.A0ARrdaM...",
  "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6...",
  "token_type": "Bearer",
  "expires_in": 3600
}
  • หากเราเอา value จาก filed "id_token" มา decoded จะได้ข้อมูลของผู้ใช้เพิ่มเติม

{
  "iss": "https://accounts.google.com",
  "sub": "1234567890",
  "name": "John Doe",
  "email": "john.doe@gmail.com",
  "iat": 1516239022,
  "exp": 1516247022
}
  • ตัวอย่าง Sequence diagram

สรุปความแตกต่างในการใช้งาน

  • ใน OAuth 2.0, Application จะได้รับ Access Token เพื่อเข้าถึง Resource ของผู้ใช้ แต่ไม่ได้รับข้อมูลตัวตนของผู้ใช้โดยตรง

  • ใน OIDC, Application นอกจากจะได้รับ Access Token แล้ว ยังได้รับ ID Token ซึ่งสามารถใช้เพื่อยืนยันตัวตนของผู้ใช้ได้

Last updated

Was this helpful?