Zum Inhalt springen

sdk/android

Kotlin-SDK für Android mit Chrome Custom Tabs,PKCE-S256-Autorisierungscode-Flow und Keystore-gesichertemEncryptedSharedPreferences-Token-Speicher.

Als Markdown anzeigen

Zustand

Der Paketstatus lautet Lokal implementiert und verifiziert. Die JVM-Unit-Test-Suite ist erfolgreich und deckt PKCE, die Verarbeitung von State und Nonce, Gastfunktionen und Speicherverträge ab. EncryptedSharedPreferences, Chrome Custom Tabs, App Links und ein echter IdP-Roundtrip erfordern weiterhin ein Gerät oder einen Emulator. Diese Seite dokumentiert implementiertes Verhalten; sie stellt keine Aussage zur Produktionsreife dar.

Registry-Status: UNPUBLISHED. Installieren Sie dieses SDK nur aus einem Checkout des Repository-Quellcodes; verwenden Sie keine externe Paket-Registry.

Anforderungen

  • Android API 26+ (Android 8.0)
  • Kotlin 1.9+ und AndroidX

Installation

Fügen Sie die Abhängigkeit in build.gradle.kts Ihres App-Moduls hinzu:

// settings.gradle.kts
includeBuild("../xid/sdk/android")

// app/build.gradle.kts
dependencies {
    implementation("dev.xid:xid-android:0.1.0-alpha.0")
}

Manifest-Einrichtung

Eine Callback-Activity mit einem Intent-Filter registrieren. App Links(HTTPS-Schema mit autoVerify) werden gegenüber benutzerdefiniertenSchemata empfohlen:

<!-- AndroidManifest.xml -->
<activity android:name=".AuthCallbackActivity" android:exported="true">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https"
              android:host="yourapp.example.com"
              android:pathPrefix="/auth/callback" />
    </intent-filter>
</activity>

Schnellstart

import dev.xid.sdk.Xid
import dev.xid.sdk.model.XidConfig

// 1. Initialize in Application.onCreate. offline_access is rejected until DPoP is implemented.
Xid.configure(
    context = this,
    config = XidConfig(
        issuer = "https://xid.dev",
        clientId = "your_client_id",
        redirectUri = "https://yourapp.example.com/auth/callback",
        scopes = listOf("openid", "profile", "email"),
    )
)

// 2. Sign in (opens Chrome Custom Tabs)
lifecycleScope.launch { Xid.signIn(requireContext()) }

// 3. Handle redirect in AuthCallbackActivity
val session = Xid.handleRedirect(intent.data.toString())

// 4. Read the current unexpired session. Expiry requires reauthorization.
val session = Xid.getSession()

// 5. Get the current unexpired access token.
val token = Xid.getAccessToken()

// 6. Clear local state and optionally open end_session.
Xid.signOut(context = this, openEndSession = true)

Kern-API

Methode Signatur
configure fun configure(context: Context, config: XidConfig)
signIn suspend fun signIn(context: Context, options: SignInOptions? = null)
handleRedirect suspend fun handleRedirect(url: String): XidSession
getSession suspend fun getSession(): XidSession?
getAccessToken suspend fun getAccessToken(options: GetAccessTokenOptions? = null): String
signOut suspend fun signOut(context: Context? = null, openEndSession: Boolean = false)
setTokenStorage fun setTokenStorage(adapter: TokenStorageAdapter)

Fehlertypen

Alle SDK-Fehler sind Unterklassen der versiegelten Klasse XidException:

Unterklasse Auslöser
NotConfigured configure() wurde nicht aufgerufen
UserCancelled Benutzer hat Custom Tabs geschlossen, ohne abzuschließen
StateMismatch OAuth-State-Abweichung — möglicher CSRF
TokenExchangeFailed Token-Endpunkt hat einen Fehler zurückgegeben
TokenValidationFailed Validierung der ID-Token-Signatur oder der Claims fehlgeschlagen
NoSession Sitzungsmethode aufgerufen, während abgemeldet

Sicherheit

  • Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
  • Nur PKCE S256. Der Server lehnt die Plain-Challenge-Methode ab.
  • EncryptedSharedPreferences auf Basis von Android Keystore (AES-256-GCM)schützen den Token-Speicher im Ruhezustand.
  • Zufälliger OAuth-State wird pro Anfrage generiert; bei der Weiterleitungzur CSRF-Prävention validiert.

Bekannte Einschränkungen

  • Die JWKS-gestützte ID-Token-Prüfung ist implementiert und lokal unit-getestet. Für L4 sind noch Android-Geräte- oder Emulator- und echte IdP-Tests erforderlich.
  • Kein Mechanismus, um zu erkennen, wann der Benutzer Custom Tabs schließt,ohne die Autorisierung abzuschließen.
  • Nur ein Konto — die Speicherschicht verwendet feste Schlüssel.
Navigation

Suchbegriff eingeben...

Mit den Pfeiltasten navigierenEingabetaste zum AuswählenEscape zum Schließen