זהות לאפליקציות שלך, על תקנים פתוחים
מלווה אותך פנימה.
חשבון אחד. כל הדלתות.
Usher Identity מחבר אנשים לאפליקציות שלך עם OpenID Connect ו-OAuth 2.1: מפתחות גישה, קודים, התחברות דרך רשתות חברתיות וארגונים, וכל סביבה מבודדת מכל האחרות.
חינם בהתחלה. רץ גם על השרתים שלך.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
ה-Lobby
דף התחברות שמקבל את פניך, לא חוקר אותך.
ה-Lobby הוא דף ההתחברות ש-Usher Identity מארח עבור האפליקציה שלך. הוא תמיד אומר לאן האדם ממשיך, ונראה אותו דבר לא משנה מאיזו אפליקציה הגיעו אליו, כך שאנשים לומדים לסמוך עליו.
- מציין את המוצר שאליו ממשיכים, בכל פעם.
- מפתחות גישה, קודים בדוא״ל וקישורי קסם, וסיסמאות רק אם רוצים.
- אותו דף רגוע, בהיר או כהה, בכל מוצר.
זה עותק עובד של ה-Lobby. הוא רץ בדף הזה, לא שולח שום דבר ולא מחבר אף אחד.
תקנים, בלי תלות בספק
מדבר את הפרוטוקולים שהמערכת שלך כבר מכירה.
Usher Identity הוא קודם כול ספק OpenID Connect. אפשר להשתמש ב-SDK שלנו כשזה מתאים, או בכל ספריית OIDC בכל שפה. וגם אם עוזבים יום אחד, האפליקציות שלך לא צריכות לשנות את הדרך שבה הן מחברות אנשים.
- OIDC Core · Discovery
OpenID Connect
מסמך גילוי לכל סביבה, אסימוני זהות ו-userinfo. כל ספריית לקוח מוסמכת עובדת.
- S256 בלבד
OAuth 2.1 עם PKCE
קוד הרשאה עם PKCE לכל לקוח, ציבורי או סודי. בלי זרימה מרומזת (implicit), ובלי סיסמאות בנקודת הקצה של האסימונים.
- RS256 · ES256 · EdDSA
JWKS והחלפת מפתחות
כל סביבה חותמת במפתחות משלה, שמפורסמים ב-jwks_uri שלה. אפשר להחליף אותם בלי לנתק אנשים מחוברים.
- RFC 7662 · RFC 7009
בדיקה וביטול של אסימונים
אפשר לשאול אם אסימון עדיין תקף, או לסיים אותו עכשיו. Usher Identity בודק את הסשנים שלו בכל בקשה, כך שסיום סשן נכנס לתוקף מיד.
התנתקות ביוזמת האפליקציה ובערוץ אחורי
אפשר לנתק מתוך האפליקציה שלך, או לתת ל-Usher Identity להודיע לכל האפליקציות כשסשן מסתיים בכל מקום שהוא.
- RFC 9449
DPoP
קושרים אסימונים למפתח שנמצא אצל הלקוח, כך שאסימון גנוב לא שווה כלום לבדו.
- WebAuthn
מפתחות גישה
חלק מרכזי, לא תוספת. אנשים מתחברים עם טביעת אצבע, פנים או מפתח אבטחה, ואין שום דבר שאפשר לגנוב בפישינג.
- TOTP
אפליקציות אימות
קודים מבוססי זמן מכל אפליקציית אימות, עם קודי גיבוי. גורם שני יכול להיות אפשרות או חובה.
קישורי קסם
הקשה אחת מתיבת הדואר הנכנס. לזמן קצר, לשימוש אחד, וקשורים לסביבה ששלחה אותם.
קודים בדוא״ל
שש ספרות, לאנשים שמתחברים במכשיר אחד וקוראים דוא״ל במכשיר אחר.
התחברות דרך רשתות חברתיות
Google, GitHub, Microsoft ו-Apple. חשבון מקושר רק אחרי שכתובת הדוא״ל שלו אומתה.
ארגונים וצוותים
חברים, תפקידים והזמנות לעסקים שמשתמשים באפליקציה שלך.
- בקרוב
SAML
התחברות יחידה (SSO) מול ספקי הזהויות הארגוניים של הלקוחות שלך.
- בקרוב
SCIM
הוספה והסרה של משתמשים ישירות מספריות המשתמשים של הלקוחות שלך.
איך עובדת התחברות
חמישה שלבים, וכולם סטנדרטיים.
זו זרימת קוד ההרשאה של OpenID Connect עם PKCE, אותה זרימה שכל ספק זהויות רציני מדבר. אפשר לגלול ולעבור עליה.
- 01
האפליקציה שלך שולחת אותם ל-Lobby.
כשמישהו בוחר "המשך עם Usher Identity", האפליקציה שלך מפנה אותו לנקודת הקצה של ההרשאה בסביבה שלך, עם אתגר PKCE וערך state שהיא תבדוק אחר כך.
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
- 02
הם מתחברים, בדרך שלהם.
מפתח גישה, קוד בדוא״ל, קישור קסם, חשבון ברשת חברתית או סיסמה: ה-Lobby מציע רק את מה שהסביבה שלך מתירה, ותמיד אומר לאיזו אפליקציה הם ממשיכים.
Usher IdentityUsher Identityממשיכים אל Acmeשמחים לראות אותך שוב.
שימוש במפתח גישהשליחת קוד בדוא״ל - 03
הם מסכימים לשתף.
בפעם הראשונה, אנשים רואים מה האפליקציה שלך מבקשת (הפרופיל, כתובת הדוא״ל, להישאר מחוברים) ומסכימים פעם אחת.
Acme רוצה:
- לראות את השם והתמונה שלך
- לראות את כתובת הדוא״ל שלך
- להשאיר את ההתחברות שלך פעילה
ביטולאישור - 04
Usher Identity מחזיר קוד.
הדפדפן חוזר אל כתובת ההפניה שלך עם קוד חד-פעמי שתקף לחמש דקות, ועם ה-state ששלחת, שהאפליקציה שלך בודקת.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
האפליקציה שלך מחליפה אותו באסימונים.
השרת שלך שולח את הקוד ואת ה-verifier של PKCE לנקודת הקצה של האסימונים. בחזרה מגיעים אסימון זהות שאומר מי הם, אסימון גישה ל-API שלך, ואסימון רענון כדי שיישארו מחוברים.
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 }
בידוד מעצם התכנון
כל סביבה היא בניין בפני עצמו.
סביבות הייצור והפיתוח שלך, וגם של כל לקוח אחר, לא חולקות שום דבר משמעותי. טעות באחת לא יכולה לקרוא מסביבה אחרת, לחתום בשמה או להתחבר אליה.
- סכמת Postgres משלה
- לא עמודת דייר בטבלה משותפת: סכמה שנוצרה עבור הסביבה, ושום דבר אחר בתוכה.
- מפתחות חתימה משלה
- אסימונים מסביבה אחת לעולם לא יאומתו מול המפתחות של סביבה אחרת.
- סודות מוצפנים משלה
- מוצפנים במפתח הנתונים של הסביבה עצמה, שבעצמו עטוף במפתח ראשי.
- מארח משלה
- המנפיקים נמצאים בדומיין נפרד מהאתר של Usher ומ-Console, עם קובצי Cookie של מארח בלבד.
usheridentity.com
האתר, Usher Identity Console, חשבונות Usher Identity
*.usherid.com
מנפיק אחד לכל סביבה, בדומיין נפרד
משתמשים, סשנים ואסימונים נמצאים בסכמה שנוצרה עבור הסביבה הזו. השאילתות רצות מול הסכמה הזו, ואף פעם לא מול טבלה משותפת עם עמודת דייר.
להעתיק את סוד הלקוח המוצפן של Google מסביבת הייצור של Acme אל סביבת הייצור של Northwind.
למפתחים
ההתחברות הראשונה שלך, בשלוש דרכים.
אפשר לשלב את ה-SDK כשהוא יגיע, להשתמש בספריית ה-OIDC שכבר סומכים עליה, או להתחיל בקריאת מסמך הגילוי. מתחת לכול, זה אותו פרוטוקול.
// 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 />
}להריץ בעצמך
השרתים שלך, המפתחות שלך.
אפשר להשתמש ב-Usher Identity כשירות, או להריץ את אותה פלטפורמה על השרתים שלך, עם המפתחות שלך ועם מסד הנתונים שלך.
Docker
קובץ Compose אחד: האפליקציות, Postgres, Valkey, שכבת הקצה של Caddy ופרוקסי היציאה. הקונטיינרים רצים בלי הרשאות חדשות, וה-capabilities שלהם מוסרות.
Ubuntu
מספיק שרת Ubuntu רגיל. Caddy מטפל בסיום ה-TLS, והסודות הם קבצים שמועברים לקונטיינרים, ואף פעם לא נצרבים לתוך האימג׳ים.
Postgres
ב-Postgres נשמר הכול, סכמה אחת לכל סביבה. הוא ו-Valkey יושבים ברשת שאין לה שום נתיב לאינטרנט.
# 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המדריך המלא לאירוח עצמי בדרך. הפקודות שלמעלה מראות את הכיוון.
ללוות את המשתמשים שלך פנימה.
יוצרים מרחב עבודה ופרויקט, והסביבה הראשונה שלך מגיעה עם מנפיק, מפתחות ו-Lobby משלה.
מתחברים פעם אחת. ברוכים הבאים בכל מקום.