Chuyển đến nội dung

Danh tính cho ứng dụng của bạn, trên các tiêu chuẩn mở

Mời bạn vào.

Một tài khoản. Mọi cánh cửa.

Usher Identity đăng nhập cho người dùng vào ứng dụng của bạn bằng OpenID Connect và OAuth 2.1: mã khóa, mã xác minh, đăng nhập bằng mạng xã hội và tổ chức, với mỗi môi trường được tách biệt khỏi mọi môi trường khác.

Bắt đầu miễn phí. Chạy được cả trên máy chủ của riêng bạn.

Lobby

Một trang đăng nhập biết chào đón, không tra hỏi.

Lobby là trang đăng nhập mà Usher Identity lưu trữ cho ứng dụng của bạn. Trang luôn cho biết người dùng đang đi đâu, và trông giống nhau dù ứng dụng nào đưa họ đến, nên người dùng dần tin tưởng nó.

Tiếp tục đến
Chủ đề
  • Lần nào cũng nêu tên sản phẩm bạn sắp đến.
  • Mã khóa, mã qua email và liên kết đăng nhập, cùng mật khẩu nếu bạn muốn.
  • Cùng một trang điềm tĩnh, sáng hay tối, trong mọi sản phẩm.

Đây là một bản Lobby hoạt động thật. Nó chạy ngay trong trang này, không gửi gì đi, và không đăng nhập cho ai cả.

Usher IdentityUsher IdentityTiếp tục đến Acme Notes

Chào mừng bạn quay lại.

Đăng nhập bằng tài khoản Usher Identity của bạn.

Lần đầu đến đây?

Được bảo mật bởi Usher Identity

Tiêu chuẩn, không ràng buộc

Nói đúng những giao thức mà hệ thống của bạn đã biết.

Trước hết, Usher Identity là một nhà cung cấp OpenID Connect. Hãy dùng SDK của chúng tôi khi phù hợp, hoặc bất kỳ thư viện OIDC nào bằng bất kỳ ngôn ngữ nào. Nếu một ngày bạn rời đi, các ứng dụng của bạn không phải thay đổi cách đăng nhập cho người dùng.

Có sẵn token làm mới, sự đồng ý và phạm vi.
  • OIDC Core · Discovery

    OpenID Connect

    Một tài liệu khám phá cho mỗi môi trường, token ID và userinfo. Mọi thư viện client đã được chứng nhận đều dùng được.

  • Chỉ S256

    OAuth 2.1 với PKCE

    Mã ủy quyền với PKCE cho mọi client, công khai hay bảo mật. Không có luồng implicit, không có mật khẩu ở endpoint token.

  • RS256 · ES256 · EdDSA

    JWKS và xoay vòng khóa

    Mỗi môi trường ký bằng khóa riêng, được công bố tại jwks_uri của môi trường đó. Hãy xoay vòng khóa mà không làm gián đoạn những người đang đăng nhập.

  • RFC 7662 · RFC 7009

    Kiểm tra và thu hồi token

    Hỏi xem một token còn hợp lệ không, hoặc chấm dứt nó ngay. Usher Identity kiểm tra phiên của chính mình ở mỗi yêu cầu, nên việc chấm dứt một phiên có hiệu lực ngay lập tức.

  • Đăng xuất do RP khởi tạo và qua kênh sau

    Đăng xuất từ ứng dụng của bạn, hoặc để Usher Identity báo cho mọi ứng dụng khi một phiên kết thúc ở bất kỳ đâu.

  • RFC 9449

    DPoP

    Gắn token với một khóa mà client nắm giữ, để một token bị đánh cắp tự nó không dùng được.

  • WebAuthn

    Mã khóa

    Hỗ trợ đầy đủ ngay từ đầu, không phải tiện ích bổ sung. Người dùng đăng nhập bằng vân tay, khuôn mặt hoặc khóa bảo mật, và không có gì để kẻ lừa đảo đánh cắp.

  • TOTP

    Ứng dụng xác thực

    Mã theo thời gian từ bất kỳ ứng dụng xác thực nào, kèm mã dự phòng. Đặt yếu tố thứ hai là tùy chọn hoặc bắt buộc.

  • Liên kết đăng nhập

    Một lần chạm từ hộp thư. Hiệu lực ngắn, chỉ dùng một lần, và gắn với môi trường đã gửi liên kết.

  • Mã qua email

    Sáu chữ số, cho những người đăng nhập trên một thiết bị và đọc email trên thiết bị khác.

  • Đăng nhập bằng mạng xã hội

    Google, GitHub, Microsoft và Apple. Tài khoản chỉ được liên kết khi email của nó đã được xác minh.

  • Tổ chức và nhóm

    Thành viên, vai trò và lời mời cho các doanh nghiệp sử dụng ứng dụng của bạn.

  • Sắp ra mắt

    SAML

    Đăng nhập một lần với nhà cung cấp danh tính nội bộ của khách hàng.

  • Sắp ra mắt

    SCIM

    Cấp và thu hồi tài khoản từ thư mục người dùng của khách hàng.

Cách một lần đăng nhập diễn ra

Năm bước, bước nào cũng theo chuẩn.

Đây là luồng mã ủy quyền với PKCE của OpenID Connect, cũng là luồng mà mọi nhà cung cấp danh tính nghiêm túc đều dùng. Hãy cuộn để xem từng bước.

  1. 01

    Ứng dụng của bạn đưa họ đến Lobby.

    Khi ai đó chọn Tiếp tục với Usher Identity, ứng dụng của bạn chuyển hướng họ đến endpoint ủy quyền của môi trường, kèm một thử thách PKCE và một giá trị state mà ứng dụng sẽ kiểm tra sau.

    GET acme.usherid.com/api/auth/oauth2/authorize
      ?response_type=code
      &client_id=acme_web
      &redirect_uri=https://app.acme.example/callback
      &scope=openid profile email offline_access
      &state=k3Jx…
      &code_challenge=E9Mel…cM
      &code_challenge_method=S256
  2. 02

    Họ đăng nhập, theo cách của họ.

    Mã khóa, mã qua email, liên kết đăng nhập, tài khoản mạng xã hội hoặc mật khẩu: Lobby chỉ đưa ra những cách mà môi trường của bạn cho phép, và luôn cho biết họ đang đến ứng dụng nào.

    Usher IdentityUsher IdentityTiếp tục đến Acme

    Chào mừng bạn quay lại.

    Dùng mã khóa
    Gửi mã qua email cho tôi
  3. 03

    Họ đồng ý chia sẻ.

    Lần đầu tiên, người dùng thấy ứng dụng của bạn đang yêu cầu gì (hồ sơ, email, duy trì đăng nhập) và đồng ý một lần.

    Acme muốn:

    • Xem tên và ảnh của bạn
    • Xem địa chỉ email của bạn
    • Duy trì đăng nhập cho bạn
    HủyCho phép
  4. 04

    Usher Identity trả lại một mã.

    Trình duyệt quay về URI chuyển hướng của bạn với một mã dùng một lần, có hiệu lực năm phút, cùng giá trị state bạn đã gửi để ứng dụng kiểm tra.

    302 Found
    Location: https://app.acme.example/callback
      ?code=SplxlOBeZQQYbYS6WxSbIA
      &state=k3Jx…
  5. 05

    Ứng dụng của bạn đổi mã lấy token.

    Máy chủ của bạn gửi mã và PKCE verifier đến endpoint token. Kết quả trả về gồm một token ID cho biết họ là ai, một token truy cập cho API của bạn, và một token làm mới để duy trì đăng nhập.

    POST acme.usherid.com/api/auth/oauth2/token
      grant_type=authorization_code&code=Splx…
      &code_verifier=dBjftJeZ4CVP…
    
    {
      "token_type": "Bearer",
      "access_token": "eyJhbGciOiJSUzI1NiIs…",
      "id_token": "eyJhbGciOiJSUzI1NiIs…",
      "refresh_token": "8xLOxBtZp8…",
      "expires_in": 600
    }

Cách ly ngay từ thiết kế

Mỗi môi trường là một tòa nhà riêng.

Các môi trường chính thức và phát triển của bạn, và của mọi khách hàng khác, không dùng chung bất cứ thứ gì quan trọng. Một sai sót ở môi trường này không thể đọc, ký thay hay đăng nhập vào môi trường khác.

Schema Postgres riêng
Không phải một cột tenant trong bảng dùng chung: một schema được tạo cho riêng môi trường đó, và không chứa gì khác.
Khóa ký riêng
Token từ một môi trường không bao giờ được xác minh bằng khóa của môi trường khác.
Thông tin bí mật được niêm phong riêng
Được niêm phong bằng khóa dữ liệu riêng của môi trường, và chính khóa này lại được bọc bằng một khóa chính.
Host riêng
Các bên phát hành nằm trên một tên miền tách biệt với trang web và Console của Usher, với cookie chỉ dành cho host đó.

usheridentity.com

Trang web, Usher Identity Console, tài khoản Usher Identity

*.usherid.com

Mỗi môi trường một bên phát hành, trên một tên miền tách biệt

Môi trường

Người dùng, phiên và token nằm trong một schema được tạo cho môi trường này. Các truy vấn chạy trên schema đó, không bao giờ trên một bảng dùng chung có cột tenant.

Sao chép client secret Google đã niêm phong từ môi trường chính thức của Acme sang môi trường chính thức của Northwind.

Cho nhà phát triển

Lần đăng nhập đầu tiên, theo ba cách.

Gắn SDK vào khi SDK ra mắt, dùng thư viện OIDC bạn vẫn tin dùng, hoặc bắt đầu bằng cách đọc tài liệu khám phá. Bên dưới, tất cả đều là cùng một giao thức.

app/layout.tsx · app/page.tsxSẽ có khi SDK ra mắt
// app/layout.tsx
import { UsherProvider } from '@usher/nextjs'

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <UsherProvider>{children}</UsherProvider>
      </body>
    </html>
  )
}

// app/page.tsx
import { SignIn, UserButton, currentUser } from '@usher/nextjs'

export default async function Page() {
  const user = await currentUser()
  return user ? <UserButton /> : <SignIn />
}

Tự vận hành

Máy chủ của bạn, khóa của bạn.

Dùng Usher Identity như một dịch vụ, hoặc chạy cùng nền tảng đó trên máy chủ của riêng bạn, với khóa và cơ sở dữ liệu của riêng bạn.

  • Docker

    Một tệp Compose: các ứng dụng, Postgres, Valkey, lớp biên Caddy và proxy đi ra. Các container chạy không có đặc quyền mới và đã bỏ bớt capability.

  • Ubuntu

    Một máy chủ Ubuntu thông thường là đủ. Caddy xử lý TLS, và thông tin bí mật là các tệp được trao cho container, không bao giờ được đóng gói sẵn vào image.

  • Postgres

    Postgres lưu giữ mọi thứ, mỗi môi trường một schema. Postgres và Valkey nằm trên một mạng không có đường ra internet.

Từ một bản checkout của Usher Identity
# on an Ubuntu server with Docker Engine and the Compose plugin
bash infra/scripts/setup-env.sh --prod \
  --domain usher.example --tenant-domain usherid.example

docker compose -f compose.yaml -f compose.prod.yaml \
  --profile core --profile apps --profile edge up -d --wait

pnpm db:migrate   # applies the database migrations

Hướng dẫn tự lưu trữ đầy đủ sắp ra mắt. Các lệnh ở trên cho thấy hình dung chung.

Mời người dùng của bạn vào.

Tạo một không gian làm việc và một dự án, và môi trường đầu tiên của bạn sẽ có sẵn bên phát hành, khóa và Lobby riêng.

Đăng nhập một lần. Được chào đón ở mọi nơi.