跳至內容
文件 · 工作區、簽發者與權杖

概念

只要掌握幾個概念,就能理解 Usher 的幾乎一切:東西存放在哪裡、由誰簽發權杖、用户在哪裡登入,以及每種權杖的有效期有多長。

工作區、項目與環境

  • 工作區是你在 Usher Console 中的團隊或公司。它的成員和審計記錄都屬於它。
  • 項目是一項產品:你的網頁 App,或合作夥伴入口網站。一個工作區可以包含許多項目。
  • 環境是項目的一份執行中的副本,通常是開發環境(development)和正式環境(production)。用户、應用程式、密鑰和設定都存放在環境中。

工作區 · Acme Ltd

項目 · Web

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

項目 · 合作夥伴入口網站

  • development · calm-heron-17
  • production · acme-partners
每個環境都是獨立的簽發者,擁有自己的用户、密鑰和 Lobby。

環境之間沒有共用任何重要的東西。每個環境都有自己的 Postgres schema、自己的簽署密鑰,以及以自己的資料密鑰密封的機密。在開發環境中註冊的用户,在正式環境中並不存在;一個環境的權杖,也永遠無法用另一個環境的密鑰驗證。

工作區管理員可以在項目「概覽」頁面的最後,輸入項目名稱後刪除該項目。項目中的每個環境都會一併刪除:其中的用户、應用程式、密鑰和設定,以及它發出的每個工作階段和權杖。項目的網址會停止回應,而且永遠不會再發給別人,因此仍然信任其中某個網址的 App,不會被別人的項目欺騙。

簽發者

每個環境都是自己的 OpenID Connect 簽發者(issuer),位於租户網域上專屬的主機:

簽發者
https://<handle>.usherid.com
  • 正式環境的代號由你選擇:3 至 32 個小寫英文字母、數字和不連續的連字號,例如你公司的名稱。代號一經使用,就永遠不會再發給別人。
  • 開發環境會取得隨機代號,例如 wise-otter-42,沒有人會把它誤認為品牌。

簽發者在環境建立時就已固定,因為它簽署的每個權杖都會在 iss 中指名它,而每個信任它的 App 都會檢查這個值。

租户網域與 Usher 自己的網域(usheridentity.com)是不同的可註冊網域,因此客户的登入頁面與 Usher Console 永遠不會是同站,而且 Cookie 僅限主機:瀏覽器只會將一個環境的 Cookie 傳送給該環境。

Lobby

Lobby 是每個環境在其簽發者上託管的登入頁面。你的 App 將用户送到這裡;它讓他們登入,再把他們送回去。

  • 它一定會在「即將前往」標籤中,指出用户要前往的 App。
  • 它只提供環境允許的方式:密碼匙、電郵驗證碼、魔術連結、社交帳户(Google、GitHub、Microsoft、Apple)和密碼。
  • 它可以要求雙重認證:驗證器 App(搭配備用碼)或密碼匙。
  • 它可以開放給任何人,或只限賓客名單中的電郵地址與網域。

不論是哪個產品帶用户來,它看起來都一樣。這是刻意的設計:大家會認得真正的 Lobby 長什麼樣子,也能在頁面不是 Lobby 時察覺到。

Usher 帳户

大多數環境都有自己的用户。Usher 帳户則不同:一個帳户就能讓用户登入每個提供「使用 Usher 繼續」的 App。用户在 account.usheridentity.com 管理自己的帳户。

權杖與有效期

權杖預設可設定為用途
授權碼5 分鐘固定用來換取一次權杖。只能使用一次。
ID 權杖10 分鐘1 到 60 分鐘告訴你的 App 是誰登入了。不可用來呼叫 API。
存取權杖10 分鐘1 到 60 分鐘傳送給你的 API,由 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,因此你的程式庫會自行擷取,並在密鑰輪替時取得新的密鑰。

範圍

範圍你的 App 會收到
openid必要。包含用户 sub 的 ID 權杖。
profile他們的姓名和相片。
email他們的電郵地址,以及該地址是否已驗證。
offline_access重新整理權杖,讓他們保持登入。