कॉन्टेंट पर जाएँ
दस्तावेज़ · iOS और Android

iOS और Android

नेटिव ऐप लोगों को सिस्टम ब्राउज़र में उनके एनवायरनमेंट की Lobby से साइन इन कराते हैं, वेब व्यू में कभी नहीं: लोग अपनी पासकी, सहेजे गए पासवर्ड और Usher सेशन इस्तेमाल करते हैं, और ऐप को कभी पासवर्ड नहीं दिखता। OpenID Connect का बाक़ी काम SDK आपके लिए करते हैं, और टोकन डिवाइस पर ही रखते हैं।

ऐप रजिस्टर करें

Usher Console में एनवायरनमेंट खोलें, फिर ऐप्लिकेशन → नया ऐप्लिकेशन → मोबाइल या डेस्कटॉप पर जाएँ। इसे आपके अपने किसी डोमेन से बना एक प्राइवेट-यूज़ रीडायरेक्ट दें, जैसे com.example.notes:/oauth/callback। इसे एक क्लाइंट ID मिलती है और कोई सीक्रेट नहीं: फ़ोन पर चलने वाला ऐप सीक्रेट सुरक्षित नहीं रख सकता, इसलिए वह इसके बजाय 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)।
  • आपके एनवायरनमेंट की कुंजियों से ID टोकन का सिग्नेचर, और उसका इश्यूअर, ऑडियंस और समय-सीमा।
  • रीफ़्रेश टोकन रोटेट होते हैं: हर एक सिर्फ़ एक बार इस्तेमाल होता है। साइन आउट करने पर Usher में उसे रद्द कर दिया जाता है।
  • DPoP, अगर आप इसे चालू करें: टोकन डिवाइस पर रखी एक कुंजी से बंधे रहते हैं, और कहीं और कॉपी किए जाएँ तो बेकार हैं।

ऐक्सेस टोकन से अपना API कॉल करने के लिए, API को नाम दें और resources से उसे माँगें: देखें आपके अपने API।