← Alle Erweiterungen

Native Erweiterung

KlugAuth

com.klug.auth.KlugAuth

KEIN APM NÖTIG. Herunterladen und loslegen. Einfacher geht es nicht.

Anmeldung mit Apple und Anmeldung mit Google aus ActionScript, mit den System-Anmelde-Sheets. Ihre App erhält ein verifiziertes Identity-Token für Ihren Server, sodass Nutzer ein Konto anlegen, ohne sich ein Passwort ausdenken zu müssen.

iOSAndroidmacOSiPad auf dem Mac Im Produktiveinsatz Ab €19 / Jahr · Kaufen

Überblick

Die meisten Nutzer geben am Registrierungsformular auf: ein Benutzername, ein Passwort, das man sich merken muss, ein E-Mail-Code, der im Spam landet. Mit KlugAuth tippen sie auf Weiter mit Apple oder Weiter mit Google und sind fertig.

KlugAuth zeigt die native Anmeldung der jeweiligen Plattform: das Apple-Sheet mit Face ID / Touch ID unter iOS und macOS, das Android-Kontofenster (Credential Manager) für Google und das System-Anmeldefenster für Google unter iOS und macOS. Es liefert das Identity-Token des Anbieters zusammen mit Ihrer Nonce, bereit zur Prüfung auf Ihrem Server, dazu den Apple-Autorisierungscode, den Sie brauchen, um die Verknüpfung beim Löschen eines Kontos zu widerrufen (App-Store-Richtlinie 5.1.1(v)).

Es ist kein Google-SDK enthalten: Die Google-Anmeldung unter iOS und macOS nutzt den Standard-OAuth-Ablauf mit PKCE im System-Browser-Sheet, sodass die Erweiterung klein bleibt.

KlugAuth läuft im aktuellen Release unserer Apps, unseres Praxisbeweises, für Registrierung, Anmeldung und die Bestätigung einer Geräte-Abmeldung mit Apple oder Google.

Funktionen

  • Eigenständig: eine ANE, keine Kernbibliothek und keine abhängigen ANEs, die Sie ergänzen müssten
  • Anmeldung mit Apple unter iOS 13+, macOS 10.15+ und für iPad-Apps auf Macs mit Apple Silicon
  • Anmeldung mit Google unter Android (Credential Manager) und unter iOS / macOS (System-Anmeldefenster, kein Google-SDK)
  • Identity-Token, Benutzer-ID, E-Mail und Name; Apple-Autorisierungscode für Aktualisierung und Widerruf
  • Nonce-Helfer für den Replay-Schutz (Apple überträgt dessen SHA-256, Google den Rohwert)
  • Prüfung des Apple-Credential-Status (autorisiert / widerrufen) für wiederkehrende Nutzer
  • Getrennte Ereignisse für Erfolg, Abbruch und Fehler; ein Abbruch wird gemeldet, nie als Fehler

Unterstützte Plattformen

iOS Apple + Google · arm64
Android Google · Credential Manager
macOS Apple + Google · arm64 · x86_64
iPad auf dem Mac Apple + Google

Die Anmeldung mit Apple unter Android ist mit dem Web-Ablauf von Apple und einer kleinen Server-Seite möglich; wir können das im Rahmen eines Projekts bereitstellen. isSupported (Apple) und isGoogleSupported sagen Ihrem Code, was das Gerät bietet.

Erste Schritte

Fügen Sie die Erweiterung Ihrem Application Descriptor hinzu:

app.xml
<extensions>
    <extensionID>com.klug.auth.KlugAuth</extensionID>
</extensions>

Für die Anmeldung mit Apple fügen Sie das Entitlement hinzu (iOS: Entitlements im Descriptor; macOS: beim Signieren):

app.xml · Entitlements
<key>com.apple.developer.applesignin</key>
<array><string>Default</string></array>

Für Google legen Sie OAuth-Clients in der Google Cloud Console an: einen Web-Client (seine ID ist die Token-Audience unter Android), einen Android-Client mit Ihrem Paketnamen und SHA-1 und einen iOS-Client für iOS und macOS.

Codebeispiele

Fünf vollständige Abläufe, von den Schaltflächen bis zu Ihrem Server. Jeder Aufruf kehrt sofort zurück; Ergebnisse kommen als KlugAuthEvents an. Vollständige Dokumentation →

1 · Anbieten, was das Gerät unterstützt
SignIn.as
import com.klug.auth.KlugAuth;
import com.klug.auth.KlugAuthEvent;

var auth:KlugAuth = KlugAuth.getInstance();
var nonce:String = "";   // a fresh one for every attempt

appleButton.visible  = auth.isSupported;         // iOS 13+, macOS 10.15+, iPad apps on the Mac
googleButton.visible = auth.isGoogleSupported;   // Android, iOS 13+, macOS 10.15+

auth.addEventListener( KlugAuthEvent.APPLE_SUCCESS,   onAppleSuccess );
auth.addEventListener( KlugAuthEvent.APPLE_CANCELED,  onCanceled );
auth.addEventListener( KlugAuthEvent.APPLE_ERROR,     onError );
auth.addEventListener( KlugAuthEvent.GOOGLE_SUCCESS,  onGoogleSuccess );
auth.addEventListener( KlugAuthEvent.GOOGLE_CANCELED, onCanceled );
auth.addEventListener( KlugAuthEvent.GOOGLE_ERROR,    onError );
2 · Anmeldung mit Apple
Apple.as
function signInWithApple():void
{
    nonce = KlugAuth.generateNonce();          // 32 random bytes as hex, used once
    if ( !auth.signInWithApple( nonce ) )      // false: not supported, or a sheet is already open
        showMessage( "Sign in with Apple is not available." );   // your app function
}

function onAppleSuccess( e:KlugAuthEvent ):void
{
    // the token carries SHA-256 of the nonce: the server hashes the raw value and compares
    sendToServer( "apple", e.identityToken, nonce, e.fullName, e.authorizationCode );
    saveAppleUserID( e.userID );   // stable for this Apple ID; your app function
    // e.email and the names arrive only on the FIRST authorization;
    // the e-mail is always inside the identity token
}

// your app function: the server verifies the token and signs the user in
function sendToServer( provider:String, idToken:String, rawNonce:String,
                       name:String, appleCode:String = "" ):void
{
    var vars:URLVariables = new URLVariables();
    vars.provider = provider;
    vars.id_token = idToken;
    vars.nonce    = rawNonce;
    vars.name     = name;
    if ( appleCode != "" ) vars.code = appleCode;   // lets the server revoke the link later

    var req:URLRequest = new URLRequest( "https://your.server/auth" );
    req.method = URLRequestMethod.POST;
    req.data = vars;
    var loader:URLLoader = new URLLoader();
    loader.addEventListener( Event.COMPLETE, onServerAnswer );   // your app function
    loader.load( req );
}
3 · Anmeldung mit Google
Google.as
import flash.system.Capabilities;

// Android: the WEB client ID, which is the token audience on your server.
// iOS and macOS: the iOS client ID, used in the system sign-in window.
var googleClientId:String = Capabilities.manufacturer.indexOf( "Android" ) >= 0
    ? "YOUR_WEB_CLIENT_ID.apps.googleusercontent.com"
    : "YOUR_IOS_CLIENT_ID.apps.googleusercontent.com";

function signInWithGoogle():void
{
    nonce = KlugAuth.generateNonce();         // Google puts the raw value into the token
    if ( !auth.signInWithGoogle( googleClientId, nonce ) )   // false: no client ID, or already open
        showMessage( "Google sign-in could not start." );
}

function onGoogleSuccess( e:KlugAuthEvent ):void
{
    // e.userID is the account e-mail; names arrive every time
    sendToServer( "google", e.identityToken, nonce, e.fullName );
}
4 · Abbruch und Fehler
Errors.as
function onCanceled( e:KlugAuthEvent ):void
{
    // the user closed the sheet: not an error, simply stay on the start screen
}

function onError( e:KlugAuthEvent ):void
{
    if ( e.type == KlugAuthEvent.GOOGLE_ERROR && e.errorCode == "NO_ACCOUNT" )
        showMessage( "Please add a Google account to this device first." );   // Android
    else
        showMessage( "Sign-in failed: " + e.errorMessage );   // e.errorCode for your log
}
5 · Einen wiederkehrenden Apple-Nutzer prüfen
Startup.as
auth.addEventListener( KlugAuthEvent.APPLE_CREDENTIAL_STATE, function( e:KlugAuthEvent ):void {
    // e.state: authorized | revoked | notFound | transferred | unknown
    if ( e.state == "revoked" || e.state == "notFound" )
        signOut();   // your app function: the user removed the app from their Apple ID
});

var savedID:String = loadAppleUserID();   // stored after APPLE_SUCCESS; your app function
if ( auth.isSupported && savedID != "" )
    auth.getCredentialState( savedID );      // Apple only: iOS and macOS

API-Übersicht

KlugAuth.getInstance()Gibt die einzige Instanz zurück.
isSupportedTrue, wo die Anmeldung mit Apple verfügbar ist (iOS, macOS).
isGoogleSupportedTrue, wo die Anmeldung mit Google verfügbar ist (Android, iOS, macOS).
generateNonce()Statisch. Eine frische zufällige Nonce (32 Bytes als Hex); verwenden Sie sie einmal und senden Sie denselben Wert an Ihren Server.
signInWithApple(nonce)Öffnet das Anmelde-Sheet von Apple. Gibt false zurück, wenn es nicht gestartet werden konnte (nicht unterstützt oder eine Anmeldung läuft bereits).
signInWithGoogle(clientId, nonce)Öffnet die Google-Anmeldung. Android: die Web-Client-ID; iOS / macOS: die iOS-Client-ID. Gibt false zurück, wenn sie nicht gestartet werden konnte.
getCredentialState(userID)Fragt Apple, ob der Nutzer weiterhin autorisiert ist; die Antwort kommt als APPLE_CREDENTIAL_STATE. iOS und macOS.
KlugAuthEventidentityToken, authorizationCode, userID, email, givenName, familyName, fullName, state, errorCode, errorMessage.

Ereignisse

APPLE_SUCCESSidentityToken, authorizationCode, userID; email und Namen nur bei der ersten Autorisierung.
APPLE_CANCELEDDer Nutzer hat das Sheet geschlossen.
APPLE_ERRORerrorCode und errorMessage vom System.
APPLE_CREDENTIAL_STATEuserID und state: authorized · revoked · notFound · transferred · unknown
GOOGLE_SUCCESSidentityToken, userID (die E-Mail-Adresse des Kontos), email, givenName, familyName.
GOOGLE_CANCELEDDer Nutzer hat das Sheet geschlossen.
GOOGLE_ERRORerrorCode und errorMessage; unter Android NO_ACCOUNT, wenn das Gerät kein Google-Konto hat.

KlugAuth kaufen

Eine Jahreslizenz für eine AIR-Anwendung, mit allen Updates für 12 Monate. Nach der Zahlung erhalten Sie die Erweiterung, die ActionScript-Bibliothek und die Dokumentation per E-Mail, in der Regel innerhalb eines Werktags. Lizenz und Bedingungen

Simple
€19 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Kein Support
Simple kaufen
Standard
€149 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Antwort per E-Mail innerhalb von 7 Tagen
Standard kaufen
Priority
€299 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Antwort per E-Mail innerhalb von 48 Stunden
Priority kaufen
Die Steuern werden an der Kasse von Link (Stripe) berechnet. Die Application-ID Ihrer AIR-App geben Sie beim Bezahlen ein.

Voraussetzungen

AIR SDK51.x (HARMAN)
iOSiOS 13 oder neuer
AndroidAndroid 6 oder neuer, Google Play Services
macOSmacOS 10.15 oder neuer
AppleCapability „Sign in with Apple“ für Ihre App-ID
GoogleOAuth-Clients in der Google Cloud Console