ข้ามไปยังเนื้อหา
เอกสาร · เวิร์กสเปซ Issuer และโทเค็น

แนวคิด

แนวคิดเพียงไม่กี่ข้ออธิบายได้แทบทุกอย่างใน Usher: สิ่งต่างๆ อยู่ที่ไหน ใครเป็นผู้ออกโทเค็น ผู้คนลงชื่อเข้าที่ไหน และโทเค็นแต่ละชนิดมีอายุนานเท่าใด

เวิร์กสเปซ โปรเจกต์ และสภาพแวดล้อม

  • เวิร์กสเปซ คือทีมหรือบริษัทของคุณใน Usher Console สมาชิกและบันทึกการตรวจสอบเป็นของเวิร์กสเปซ
  • โปรเจกต์ คือผลิตภัณฑ์หนึ่งชิ้น เช่น เว็บแอปของคุณ หรือพอร์ทัลพาร์ตเนอร์ เวิร์กสเปซหนึ่งมีได้หลายโปรเจกต์
  • สภาพแวดล้อม คือสำเนาของโปรเจกต์ที่ทำงานอยู่หนึ่งชุด ปกติคือ พัฒนา (development) และ ใช้งานจริง (production) สภาพแวดล้อมคือที่ที่ผู้ใช้ แอปพลิเคชัน คีย์ และการตั้งค่าอยู่

เวิร์กสเปซ · Acme Ltd

โปรเจกต์ · Web

  • development · wise-otter-42
  • production · acme

โปรเจกต์ · พอร์ทัลพาร์ตเนอร์

  • development · calm-heron-17
  • production · acme-partners
แต่ละสภาพแวดล้อมเป็น Issuer ของตัวเอง โดยมีผู้ใช้ คีย์ และ Lobby เป็นของตัวเอง

สภาพแวดล้อมไม่ได้ใช้สิ่งสำคัญใดร่วมกัน แต่ละสภาพแวดล้อมมีสคีมา Postgres คีย์ลงนาม และข้อมูลลับที่ปิดผนึกด้วยคีย์ข้อมูลเป็นของตัวเอง ผู้ที่สมัครในสภาพแวดล้อมพัฒนาจะไม่มีตัวตนในสภาพแวดล้อมใช้งานจริง และโทเค็นจากสภาพแวดล้อมหนึ่งไม่มีทางผ่านการตรวจสอบด้วยคีย์ของอีกสภาพแวดล้อมหนึ่งได้

ผู้ดูแลเวิร์กสเปซลบโปรเจกต์ได้จากท้ายหน้า “ภาพรวม” ของโปรเจกต์ หลังจากพิมพ์ชื่อโปรเจกต์ สภาพแวดล้อมทุกชุดในโปรเจกต์จะหายไปพร้อมกัน ทั้งผู้ใช้ แอปพลิเคชัน คีย์ และการตั้งค่า รวมถึงเซสชันและโทเค็นทุกรายการที่สภาพแวดล้อมนั้นออกให้ ที่อยู่ของโปรเจกต์จะหยุดตอบสนองและจะไม่ถูกมอบให้ใครอีก แอปที่ยังเชื่อถือที่อยู่เหล่านั้นจึงไม่ถูกโปรเจกต์ของผู้อื่นหลอกได้

Issuer

แต่ละสภาพแวดล้อมเป็น Issuer ของ OpenID Connect ในตัวเอง โดยอยู่ที่โฮสต์ของตัวเองบนโดเมนผู้เช่า:

Issuer
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 นาทีตายตัวนำไปแลกเป็นโทเค็นได้ครั้งเดียว ใช้ซ้ำไม่ได้
โทเค็น ID10 นาที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โทเค็นรีเฟรช เพื่อให้ผู้ใช้ลงชื่อเข้าค้างไว้