แนวคิด
แนวคิดเพียงไม่กี่ข้ออธิบายได้แทบทุกอย่างใน Usher: สิ่งต่างๆ อยู่ที่ไหน ใครเป็นผู้ออกโทเค็น ผู้คนลงชื่อเข้าที่ไหน และโทเค็นแต่ละชนิดมีอายุนานเท่าใด
เวิร์กสเปซ โปรเจกต์ และสภาพแวดล้อม
- เวิร์กสเปซ คือทีมหรือบริษัทของคุณใน Usher Console สมาชิกและบันทึกการตรวจสอบเป็นของเวิร์กสเปซ
- โปรเจกต์ คือผลิตภัณฑ์หนึ่งชิ้น เช่น เว็บแอปของคุณ หรือพอร์ทัลพาร์ตเนอร์ เวิร์กสเปซหนึ่งมีได้หลายโปรเจกต์
- สภาพแวดล้อม คือสำเนาของโปรเจกต์ที่ทำงานอยู่หนึ่งชุด ปกติคือ พัฒนา (development) และ ใช้งานจริง (production) สภาพแวดล้อมคือที่ที่ผู้ใช้ แอปพลิเคชัน คีย์ และการตั้งค่าอยู่
เวิร์กสเปซ · Acme Ltd
โปรเจกต์ · Web
- development · wise-otter-42
- production · acme
โปรเจกต์ · พอร์ทัลพาร์ตเนอร์
- development · calm-heron-17
- production · acme-partners
สภาพแวดล้อมไม่ได้ใช้สิ่งสำคัญใดร่วมกัน แต่ละสภาพแวดล้อมมีสคีมา Postgres คีย์ลงนาม และข้อมูลลับที่ปิดผนึกด้วยคีย์ข้อมูลเป็นของตัวเอง ผู้ที่สมัครในสภาพแวดล้อมพัฒนาจะไม่มีตัวตนในสภาพแวดล้อมใช้งานจริง และโทเค็นจากสภาพแวดล้อมหนึ่งไม่มีทางผ่านการตรวจสอบด้วยคีย์ของอีกสภาพแวดล้อมหนึ่งได้
ผู้ดูแลเวิร์กสเปซลบโปรเจกต์ได้จากท้ายหน้า “ภาพรวม” ของโปรเจกต์ หลังจากพิมพ์ชื่อโปรเจกต์ สภาพแวดล้อมทุกชุดในโปรเจกต์จะหายไปพร้อมกัน ทั้งผู้ใช้ แอปพลิเคชัน คีย์ และการตั้งค่า รวมถึงเซสชันและโทเค็นทุกรายการที่สภาพแวดล้อมนั้นออกให้ ที่อยู่ของโปรเจกต์จะหยุดตอบสนองและจะไม่ถูกมอบให้ใครอีก แอปที่ยังเชื่อถือที่อยู่เหล่านั้นจึงไม่ถูกโปรเจกต์ของผู้อื่นหลอกได้
Issuer
แต่ละสภาพแวดล้อมเป็น Issuer ของ OpenID Connect ในตัวเอง โดยอยู่ที่โฮสต์ของตัวเองบนโดเมนผู้เช่า:
https://<handle>.usherid.com- สภาพแวดล้อมใช้งานจริงมีแฮนเดิลที่คุณเลือกเอง ยาว 3 ถึง 32 ตัว ประกอบด้วยตัวอักษรภาษาอังกฤษพิมพ์เล็ก ตัวเลข และขีดกลางที่ไม่ติดกัน เช่น ชื่อบริษัทของคุณ แฮนเดิลที่เคยใช้แล้วจะไม่ถูกมอบให้ใครอีก
- สภาพแวดล้อมพัฒนาได้แฮนเดิลแบบสุ่ม เช่น
wise-otter-42ซึ่งไม่มีใครเข้าใจผิดว่าเป็นแบรนด์
Issuer จะถูกกำหนดตายตัวเมื่อสร้างสภาพแวดล้อม เพราะทุกโทเค็นที่ Issuer ลงนามจะระบุ Issuer ไว้ใน iss และทุกแอปที่เชื่อถือ Issuer นั้นจะตรวจสอบค่านี้
โดเมนผู้เช่าเป็นโดเมนที่จดทะเบียนแยกจากโดเมนของ Usher เอง (usheridentity.com) หน้าลงชื่อเข้าของลูกค้าจึงไม่มีทางเป็น same-site กับ Usher Console และคุกกี้เป็นแบบ host-only: เบราว์เซอร์จะส่งคุกกี้ของสภาพแวดล้อมหนึ่งไปให้สภาพแวดล้อมนั้นเท่านั้น
Lobby
Lobby คือหน้าลงชื่อเข้าที่แต่ละสภาพแวดล้อมโฮสต์ไว้ที่ Issuer ของตัวเอง แอปของคุณส่งผู้ใช้ไปที่นั่น แล้ว Lobby จะพาผู้ใช้ลงชื่อเข้าและส่งกลับมา
- Lobby บอกชื่อแอปที่ผู้ใช้กำลังจะไปเสมอ ในป้าย “กำลังไปที่”
- Lobby เสนอเฉพาะวิธีที่สภาพแวดล้อมอนุญาต: พาสคีย์ รหัสทางอีเมล ลิงก์ลงชื่อเข้า บัญชีโซเชียล (Google, GitHub, Microsoft, Apple) และรหัสผ่าน
- Lobby บังคับใช้ปัจจัยที่สองได้: แอปยืนยันตัวตน (พร้อมรหัสสำรอง) หรือพาสคีย์
- Lobby เปิดให้ทุกคนใช้ได้ หรือจำกัดเฉพาะรายชื่อแขกที่ระบุที่อยู่และโดเมนก็ได้
Lobby มีหน้าตาเหมือนเดิมไม่ว่าผลิตภัณฑ์ใดจะส่งผู้ใช้มา นี่เป็นความตั้งใจ: ผู้คนจะเรียนรู้ว่า Lobby จริงมีหน้าตาอย่างไร และสังเกตได้เมื่อหน้าใดไม่ใช่
บัญชี Usher
สภาพแวดล้อมส่วนใหญ่มีผู้ใช้ของตัวเอง แต่บัญชี Usher แตกต่างออกไป: เป็นบัญชีเดียวที่ใช้ลงชื่อเข้าทุกแอปที่มีปุ่ม “ดำเนินการต่อด้วย Usher” ผู้คนจัดการบัญชีของตัวเองได้ที่ account.usheridentity.com
โทเค็นและอายุการใช้งาน
| โทเค็น | ค่าเริ่มต้น | ตั้งค่าได้ | ใช้ทำอะไร |
|---|---|---|---|
| รหัสการอนุญาต | 5 นาที | ตายตัว | นำไปแลกเป็นโทเค็นได้ครั้งเดียว ใช้ซ้ำไม่ได้ |
| โทเค็น ID | 10 นาที | 1 ถึง 60 นาที | บอกแอปของคุณว่าใครลงชื่อเข้า ไม่ได้มีไว้เรียก API |
| โทเค็นการเข้าถึง | 10 นาที | 1 ถึง 60 นาที | ส่งไปยัง API ของคุณ ซึ่งจะตรวจสอบโทเค็นนี้ |
| โทเค็นรีเฟรช | 30 วัน | 1 ถึง 90 วัน | ใช้ขอโทเค็นการเข้าถึงใหม่ หมุนเวียนทุกครั้งที่ใช้ ต้องใช้ offline_access |
| โทเค็นการเข้าถึงสำหรับเครื่อง | 15 นาที | 1 ถึง 60 นาที | สำหรับ client_credentials: เซิร์ฟเวอร์ที่ไม่มีผู้ใช้อยู่เบื้องหลัง |
| รหัสทางอีเมล ลิงก์ลงชื่อเข้า | 10 นาที | ตายตัว | ลงชื่อเข้าได้ครั้งเดียว รหัสลองได้สามครั้ง |
เซสชันใน Lobby ก็มีอายุเช่นกัน: เซสชันจะสิ้นสุดเมื่อไม่ได้ใช้งาน 7 วัน (ตั้งได้ 1 ถึง 30) และเมื่อครบ 30 วันโดยรวม (ตั้งได้ 1 ถึง 90) การเปลี่ยนข้อมูลสำคัญ เช่น ที่อยู่อีเมล ต้องมีการลงชื่อเข้าภายใน 10 นาทีที่ผ่านมา
คีย์ลงนาม
โดยค่าเริ่มต้น โทเค็นจะลงนามด้วย RS256 และสภาพแวดล้อมเลือกใช้ ES256 หรือ EdDSA แทนได้ คีย์สาธารณะเผยแพร่ไว้ที่ jwks_uri ของสภาพแวดล้อม ไลบรารีของคุณจึงดึงคีย์เหล่านี้ได้เอง และรับคีย์ใหม่เมื่อมีการหมุนเวียนคีย์
ขอบเขต
| ขอบเขต | สิ่งที่แอปของคุณได้รับ |
|---|---|
openid | จำเป็น โทเค็น ID ที่มี sub ของผู้ใช้ |
profile | ชื่อและรูปภาพของผู้ใช้ |
email | ที่อยู่อีเมลของผู้ใช้ และอีเมลนั้นได้รับการยืนยันแล้วหรือไม่ |
offline_access | โทเค็นรีเฟรช เพื่อให้ผู้ใช้ลงชื่อเข้าค้างไว้ |