iOS ו-Android
אפליקציות נייטיב מחברות אנשים דרך ה-Lobby של הסביבה בדפדפן המערכת, ואף פעם לא בתצוגת אינטרנט מוטמעת: אנשים משתמשים במפתחות הגישה, בסיסמאות השמורות ובסשן ה-Usher שלהם, והאפליקציה אף פעם לא רואה סיסמה. ערכות ה-SDK עושות בשבילך את שאר OpenID Connect, ושומרות את האסימונים במכשיר.
רישום האפליקציה
ב-Usher Console, פותחים את הסביבה ועוברים אל אפליקציות ← אפליקציה חדשה ← נייד או מחשב שולחני. נותנים לה כתובת הפניה לשימוש פרטי שמבוססת על דומיין בבעלותך, כמו com.example.notes:/oauth/callback. האפליקציה מקבלת מזהה לקוח ולא מקבלת סוד: אפליקציה בטלפון לא יכולה לשמור עליו, ולכן היא משתמשת ב-PKCE במקום. ב-Console מוצגות הוראות ההגדרה לשתי הפלטפורמות.
iOS ו-macOS
import UsherKit
let usher = UsherClient(configuration: .init(
issuer: URL(string: "https://login.example.com")!,
clientID: "…",
redirectURI: URL(string: "com.example.notes:/oauth/callback")!))
let session = try await usher.signIn()
var request = URLRequest(url: URL(string: "https://api.example.com/notes")!)
try await usher.authorize(&request)האסימונים נשמרים במחזיק המפתחות, במכשיר הזה בלבד.
Android
// build.gradle.kts: manifestPlaceholders["usherRedirectScheme"] = "com.example.notes"
val usher = Usher.client(context, UsherConfiguration(
issuer = "https://login.example.com",
clientId = "…",
redirectUri = "com.example.notes:/oauth/callback"))
val session = usher.signIn(Usher.customTabs(activity))ההתחברות נפתחת ב-Custom Tab. הסשן מוצפן עם מפתח ב-Android Keystore.
מה ערכות ה-SDK בודקות
- PKCE, state ו-nonce בכל התחברות, וגם המנפיק שמופיע בתשובה (RFC 9207).
- החתימה של אסימון הזהות מול המפתחות של הסביבה שלך, וגם המנפיק, הקהל ומועד התפוגה שלו.
- אסימוני רענון מתחלפים: כל אחד משמש פעם אחת. ההתנתקות מבטלת אותו ב-Usher.
- DPoP, אם מפעילים אותו: אסימונים שקשורים למפתח במכשיר, וחסרי תועלת אם מעתיקים אותם למקום אחר.
כדי לקרוא ל-API שלך עם אסימון הגישה, נותנים שם ל-API ומבקשים אותו עם resources: פרטים בממשקי ה-API שלך.