Khái niệm
Chỉ vài ý tưởng là giải thích được gần như mọi thứ trong Usher: mọi thứ nằm ở đâu, ai phát hành token, người dùng đăng nhập ở đâu, và mỗi token có hiệu lực bao lâu.
Không gian làm việc, dự án và môi trường
- Không gian làm việc là nhóm hoặc công ty của bạn trong Usher Console. Thành viên và nhật ký kiểm toán thuộc về không gian làm việc.
- Dự án là một sản phẩm: ứng dụng web của bạn, hoặc một cổng đối tác. Một không gian làm việc có thể chứa nhiều dự án.
- Môi trường là một bản đang chạy của dự án, thường là phát triển (development) và chính thức (production). Người dùng, ứng dụng, khóa và thiết lập đều nằm trong môi trường.
Không gian làm việc · Acme Ltd
Dự án · Web
- development · wise-otter-42
- production · acme
Dự án · Cổng đối tác
- development · calm-heron-17
- production · acme-partners
Các môi trường không dùng chung bất cứ thứ gì quan trọng. Mỗi môi trường có schema Postgres riêng, khóa ký riêng, và thông tin bí mật riêng được niêm phong dưới khóa dữ liệu riêng. Một người đăng ký trong môi trường phát triển không tồn tại trong môi trường chính thức, và token từ môi trường này không bao giờ xác minh được bằng khóa của môi trường kia.
Quản trị viên không gian làm việc có thể xóa một dự án ở cuối trang Tổng quan của dự án đó, sau khi nhập tên dự án. Mọi môi trường trong dự án đều bị xóa cùng lúc: người dùng, ứng dụng, khóa và thiết lập của chúng, cùng mọi phiên và token chúng đã cấp. Các địa chỉ của chúng ngừng phản hồi và không bao giờ được cấp lại, nên một ứng dụng vẫn còn tin tưởng một trong các địa chỉ đó không thể bị dự án của người khác đánh lừa.
Bên phát hành
Mỗi môi trường là một bên phát hành (issuer) OpenID Connect riêng, tại một host riêng trên tên miền tenant:
https://<handle>.usherid.com- Môi trường chính thức có tên định danh (handle) do bạn chọn: từ 3 đến 32 chữ cái thường, chữ số và dấu gạch nối đơn, chẳng hạn tên công ty của bạn. Một tên định danh đã dùng sẽ không bao giờ được cấp lại.
- Môi trường phát triển nhận một tên định danh ngẫu nhiên, chẳng hạn
wise-otter-42, mà không ai nhầm với một thương hiệu.
Bên phát hành được cố định khi môi trường được tạo, vì mọi token nó ký đều ghi tên nó trong iss, và mọi ứng dụng tin tưởng nó đều kiểm tra giá trị đó.
Tên miền tenant là một tên miền có thể đăng ký khác với tên miền của chính Usher (usheridentity.com), nên các trang đăng nhập của khách hàng không bao giờ cùng site với Usher Console, và cookie chỉ dành cho host: trình duyệt chỉ gửi cookie của một môi trường đến đúng môi trường đó.
Lobby
Lobby là trang đăng nhập mà mỗi môi trường lưu trữ tại bên phát hành của nó. Ứng dụng của bạn đưa người dùng đến đó; Lobby đăng nhập cho họ và đưa họ trở lại.
- Lobby luôn nêu tên ứng dụng mà người dùng sắp đến, trong chip “Tiếp tục đến”.
- Lobby chỉ đưa ra những cách đăng nhập mà môi trường cho phép: mã khóa, mã gửi qua email, liên kết đăng nhập, tài khoản mạng xã hội (Google, GitHub, Microsoft, Apple) và mật khẩu.
- Lobby có thể bắt buộc yếu tố thứ hai: một ứng dụng xác thực (kèm mã dự phòng) hoặc một mã khóa.
- Lobby có thể mở cho mọi người, hoặc giới hạn theo một danh sách khách mời gồm các địa chỉ và tên miền.
Lobby trông giống nhau dù sản phẩm nào đưa người dùng đến. Đó là có chủ ý: người dùng biết một Lobby thật trông như thế nào, và nhận ra khi một trang không phải là Lobby.
Tài khoản Usher
Hầu hết các môi trường có người dùng riêng. Tài khoản Usher thì khác: một tài khoản giúp một người đăng nhập vào mọi ứng dụng có nút Tiếp tục với Usher. Mọi người quản lý tài khoản của mình tại account.usheridentity.com.
Token và thời hạn
| Token | Mặc định | Có thể đặt thành | Dùng để làm gì |
|---|---|---|---|
| Mã ủy quyền | 5 phút | Cố định | Đổi lấy token một lần. Chỉ dùng một lần. |
| Token ID | 10 phút | 1 đến 60 phút | Cho ứng dụng của bạn biết ai đã đăng nhập. Không dùng để gọi API. |
| Token truy cập | 10 phút | 1 đến 60 phút | Gửi đến API của bạn để API kiểm tra. |
| Token làm mới | 30 ngày | 1 đến 90 ngày | Lấy token truy cập mới. Xoay vòng sau mỗi lần dùng. Cần offline_access. |
| Token truy cập cho máy | 15 phút | 1 đến 60 phút | Cho client_credentials: máy chủ không có người dùng phía sau. |
| Mã qua email, liên kết đăng nhập | 10 phút | Cố định | Một lần đăng nhập. Một mã cho phép thử ba lần. |
Phiên trong Lobby cũng có thời hạn: một phiên kết thúc sau 7 ngày không dùng (1 đến 30), và sau tổng cộng 30 ngày (1 đến 90). Thay đổi điều gì nhạy cảm, chẳng hạn địa chỉ email, cần một lần đăng nhập trong 10 phút gần nhất.
Khóa ký
Token được ký bằng RS256 theo mặc định; một môi trường có thể dùng ES256 hoặc EdDSA thay thế. Khóa công khai được công bố tại jwks_uri của môi trường, nên các thư viện của bạn tự tải về, và nhận khóa mới khi khóa được xoay vòng.
Phạm vi
| Phạm vi | Ứng dụng của bạn nhận được gì |
|---|---|
openid | Bắt buộc. Một token ID kèm sub của người dùng. |
profile | Tên và ảnh của họ. |
email | Địa chỉ email của họ, và email đó đã được xác minh hay chưa. |
offline_access | Một token làm mới, để họ được duy trì đăng nhập. |