বিষয়বস্তুতে যান
ডকুমেন্টেশন · iOS ও Android

iOS ও Android

নেটিভ অ্যাপ মানুষকে সাইন ইন করায় সিস্টেম ব্রাউজারে তাঁদের এনভায়রনমেন্টের লবির মাধ্যমে, কখনও ওয়েব ভিউতে নয়: মানুষ তাঁদের পাসকি, সংরক্ষিত পাসওয়ার্ড ও 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।