Chuyển đến nội dung
Tài liệu · iOS và Android

iOS và Android

Ứng dụng gốc đăng nhập cho người dùng qua Lobby của môi trường trong trình duyệt hệ thống, không bao giờ qua web view: người dùng dùng mã khóa, mật khẩu đã lưu và phiên Usher của họ, còn ứng dụng không bao giờ thấy mật khẩu. Các SDK lo phần còn lại của OpenID Connect giúp bạn, và giữ token trên thiết bị.

Đăng ký ứng dụng

Trong Usher Console, mở môi trường, rồi chọn Ứng dụng → Ứng dụng mới → Di động hoặc máy tính. Cấp cho ứng dụng một URI chuyển hướng dùng riêng, tạo từ một tên miền bạn sở hữu, chẳng hạn com.example.notes:/oauth/callback. Ứng dụng nhận một Client ID và không có client secret: ứng dụng trên điện thoại không thể giữ bí mật, nên dùng PKCE thay thế. Console hiển thị cách thiết lập cho cả hai nền tảng.

iOS và 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)

Token được giữ trong Chuỗi khóa, chỉ trên thiết bị này.

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))

Phần đăng nhập mở trong một Custom Tab. Phiên được mã hóa bằng một khóa trong Android Keystore.

Các SDK kiểm tra những gì

  • PKCE, state và nonce ở mỗi lần đăng nhập, và bên phát hành được nêu trong phản hồi (RFC 9207).
  • Chữ ký của token ID bằng các khóa của môi trường, cùng bên phát hành, audience và thời hạn của token.
  • Token làm mới được xoay vòng: mỗi token chỉ dùng một lần. Khi đăng xuất, token sẽ bị thu hồi tại Usher.
  • DPoP, nếu bạn bật: token được gắn với một khóa trên thiết bị, vô dụng nếu bị sao chép đi nơi khác.

Để gọi API của riêng bạn bằng token truy cập, hãy đặt tên cho API và yêu cầu nó bằng resources: xem API của riêng bạn.