← Toutes les extensions

Extension native

KlugAuth

com.klug.auth.KlugAuth

AUCUN APM NÉCESSAIRE. Téléchargez et profitez-en. Impossible de faire plus simple.

Sign in with Apple et Sign in with Google depuis ActionScript, avec les feuilles de connexion du système. Votre application reçoit un jeton d’identité vérifié pour votre serveur : les utilisateurs créent un compte sans avoir à inventer de mot de passe.

iOSAndroidmacOSiPad sur Mac En production À partir de €19 / an · Acheter

Vue d’ensemble

La plupart des utilisateurs abandonnent au formulaire d’inscription : un nom d’utilisateur, un mot de passe à retenir, un code par e-mail qui atterrit dans les spams. Avec KlugAuth, ils touchent Continuer avec Apple ou Continuer avec Google, et c’est terminé.

KlugAuth affiche la connexion native de chaque plateforme : la feuille d’Apple avec Face ID / Touch ID sur iOS et macOS, la feuille de compte Android (Credential Manager) pour Google, et la fenêtre de connexion système pour Google sur iOS et macOS. Il renvoie le jeton d’identité du fournisseur avec votre nonce, prêt à être vérifié sur votre serveur, ainsi que le code d’autorisation Apple dont vous avez besoin pour révoquer le lien lors de la suppression d’un compte (directive App Store 5.1.1(v)).

Aucun SDK Google n’est intégré : la connexion Google sur iOS et macOS utilise le flux OAuth standard avec PKCE dans la feuille du navigateur système, ce qui garde l’extension légère.

KlugAuth fonctionne dans la version actuelle de nos applications, notre preuve de concept, pour l’inscription, la connexion et la confirmation d’une déconnexion d’appareil avec Apple ou Google.

Fonctionnalités

  • Autonome : une seule ANE, sans bibliothèque centrale ni ANE de dépendance à ajouter
  • Sign in with Apple sur iOS 13+, macOS 10.15+ et applications iPad sur Mac Apple silicon
  • Sign in with Google sur Android (Credential Manager) et sur iOS / macOS (fenêtre de connexion système, sans SDK Google)
  • Jeton d’identité, identifiant utilisateur, e-mail et nom ; code d’autorisation Apple pour le renouvellement et la révocation
  • Assistant de nonce pour la protection contre le rejeu (Apple transporte son SHA-256, Google la valeur brute)
  • Vérification de l’état des identifiants Apple (autorisé / révoqué) pour les utilisateurs de retour
  • Événements distincts de réussite, d’annulation et d’erreur ; l’annulation est signalée, jamais comme une erreur

Plateformes prises en charge

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

Sign in with Apple sur Android est possible avec le flux web d’Apple et une petite page serveur ; nous pouvons la fournir dans le cadre d’un projet. isSupported (Apple) et isGoogleSupported indiquent à votre code ce que l’appareil propose.

Prise en main

Ajoutez l’extension au descripteur de votre application :

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

Pour Sign in with Apple, ajoutez le droit (entitlement) (iOS : Entitlements dans le descripteur ; macOS : lors de la signature) :

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

Pour Google, créez des clients OAuth dans la console Google Cloud : un client web (son identifiant est l’audience du jeton sur Android), un client Android avec le nom de votre paquet et votre SHA-1, et un client iOS pour iOS et macOS.

Exemples de code

Cinq flux complets, des boutons jusqu’à votre serveur. Chaque appel retourne immédiatement ; les résultats arrivent sous forme de KlugAuthEvents. Documentation complète →

1 · Proposer ce que l’appareil prend en charge
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 · Sign in with 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 · Sign in with 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 · Annulation et erreurs
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 · Vérifier un utilisateur Apple de retour
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

Aperçu de l’API

KlugAuth.getInstance()Renvoie l’instance unique.
isSupportedVrai là où Sign in with Apple est disponible (iOS, macOS).
isGoogleSupportedVrai là où Sign in with Google est disponible (Android, iOS, macOS).
generateNonce()Statique. Un nonce aléatoire neuf (32 octets en hexadécimal) ; utilisez-le une seule fois et envoyez la même valeur à votre serveur.
signInWithApple(nonce)Ouvre la feuille de connexion d’Apple. Renvoie false si elle n’a pas pu démarrer (non prise en charge, ou connexion déjà en cours).
signInWithGoogle(clientId, nonce)Ouvre la connexion Google. Android : l’identifiant du client web ; iOS / macOS : l’identifiant du client iOS. Renvoie false si elle n’a pas pu démarrer.
getCredentialState(userID)Demande à Apple si l’utilisateur est toujours autorisé ; la réponse arrive sous forme d’APPLE_CREDENTIAL_STATE. iOS et macOS.
KlugAuthEventidentityToken, authorizationCode, userID, email, givenName, familyName, fullName, state, errorCode, errorMessage.

Événements

APPLE_SUCCESSidentityToken, authorizationCode, userID ; email et les noms uniquement lors de la première autorisation.
APPLE_CANCELEDL’utilisateur a fermé la feuille.
APPLE_ERRORerrorCode et errorMessage du système.
APPLE_CREDENTIAL_STATEuserID et state : authorized · revoked · notFound · transferred · unknown
GOOGLE_SUCCESSidentityToken, userID (l’e-mail du compte), email, givenName, familyName.
GOOGLE_CANCELEDL’utilisateur a fermé la feuille.
GOOGLE_ERRORerrorCode et errorMessage ; sur Android, NO_ACCOUNT lorsque l’appareil n’a aucun compte Google.

Acheter KlugAuth

Une licence annuelle pour une application AIR, avec toutes les mises à jour pendant 12 mois. Après le paiement, vous recevez l’extension, la bibliothèque ActionScript et la documentation par e-mail, généralement sous un jour ouvré. Licence et conditions

Simple
€19 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Sans support
Acheter Simple
Standard
€149 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Réponse par e-mail sous 7 jours
Acheter Standard
Priority
€299 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Réponse par e-mail sous 48 heures
Acheter Priority
Les taxes sont calculées lors du paiement par Link (Stripe). Vous saisissez l’identifiant d’application de votre app AIR pendant le paiement.

Prérequis

SDK AIR51.x (HARMAN)
iOSiOS 13 ou version ultérieure
AndroidAndroid 6 ou version ultérieure, Google Play services
macOSmacOS 10.15 ou version ultérieure
AppleCapacité Sign in with Apple sur votre App ID
GoogleClients OAuth dans la console Google Cloud