דילוג לתוכן
תיעוד · iOS ו-Android

iOS ו-Android

אפליקציות נייטיב מחברות אנשים דרך ה-Lobby של הסביבה בדפדפן המערכת, ואף פעם לא בתצוגת אינטרנט מוטמעת: אנשים משתמשים במפתחות הגישה, בסיסמאות השמורות ובסשן ה-Usher שלהם, והאפליקציה אף פעם לא רואה סיסמה. ערכות ה-SDK עושות בשבילך את שאר OpenID Connect, ושומרות את האסימונים במכשיר.

רישום האפליקציה

ב-Usher Console, פותחים את הסביבה ועוברים אל אפליקציות ← אפליקציה חדשה ← נייד או מחשב שולחני. נותנים לה כתובת הפניה לשימוש פרטי שמבוססת על דומיין בבעלותך, כמו com.example.notes:/oauth/callback. האפליקציה מקבלת מזהה לקוח ולא מקבלת סוד: אפליקציה בטלפון לא יכולה לשמור עליו, ולכן היא משתמשת ב-PKCE במקום. ב-Console מוצגות הוראות ההגדרה לשתי הפלטפורמות.

iOS ו-macOS

swift
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

kotlin
// 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 שלך.