الهوية لتطبيقاتك، على معايير مفتوحة
يرافقك إلى الداخل.
حساب واحد لكل الأبواب.
يسجّل 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 لكل عميل، عامًا كان أو سريًا. لا تدفق ضمنيًا، ولا كلمات سر في نقطة نهاية الرموز المميزة.
- RS256 · ES256 · EdDSA
JWKS وتدوير المفاتيح
توقّع كل بيئة بمفاتيحها الخاصة، المنشورة على jwks_uri الخاص بها. دوّرها دون أن يتأثر من سجّلوا دخولهم.
- RFC 7662 · RFC 7009
فحص الرموز وإبطالها
اسأل إن كان الرمز المميز لا يزال صالحًا، أو أنهِه الآن. يتحقق Usher Identity من جلساته في كل طلب، لذا يسري إنهاء أي جلسة فورًا.
تسجيل الخروج بمبادرة من الطرف المعتمِد وعبر القناة الخلفية
سجّل الخروج من تطبيقك، أو دع Usher Identity يُبلغ كل تطبيق عندما تنتهي جلسة في أي مكان.
- RFC 9449
DPoP
اربط الرموز المميزة بمفتاح يحتفظ به العميل، فلا ينفع الرمز المسروق وحده بشيء.
- WebAuthn
مفاتيح المرور
ميزة أساسية، لا إضافة. يسجّل الأشخاص الدخول ببصمة الإصبع أو الوجه أو مفتاح أمان، فلا يبقى ما يمكن سرقته بالتصيد الاحتيالي.
- TOTP
تطبيقات المصادقة
رموز مرتبطة بالوقت من أي تطبيق مصادقة، مع رموز احتياطية. اجعل العامل الثاني اختياريًا أو إلزاميًا.
الروابط السحرية
ضغطة واحدة من صندوق الوارد. قصيرة العمر، تُستخدم مرة واحدة، ومرتبطة بالبيئة التي أرسلتها.
رموز البريد الإلكتروني
ستة أرقام، لمن يسجّل الدخول على جهاز ويقرأ بريده على جهاز آخر.
تسجيل الدخول بالحسابات الاجتماعية
Google و GitHub و Microsoft و Apple. لا يُربط أي حساب إلا بعد التحقق من بريده الإلكتروني.
المؤسسات والفرق
الأعضاء والأدوار والدعوات للشركات التي تستخدم تطبيقك.
- قريبًا
SAML
تسجيل الدخول الموحّد مع مزوّدي هوية الموظفين لدى عملائك.
- قريبًا
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 رمزًا.
يعود المتصفح إلى عنوان URI لإعادة التوجيه الخاص بك ومعه رمز يُستخدم مرة واحدة ويبقى صالحًا خمس دقائق، إضافة إلى قيمة state التي أرسلتها، والتي يتحقق منها تطبيقك.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
يستبدل تطبيقك به رموزًا مميزة.
يرسل خادمك الرمز ومُحقِّق 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، مع ملفات تعريف ارتباط مقصورة على المضيف.
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 خاصة بها.
سجّل الدخول مرة واحدة. أهلًا بك في كل مكان.