Sobes.tech
Middle+

Hoe implementeer je authenticatie via Apple in een iOS-app?

sobes.tech AI

Antwoord van AI

Voor het implementeren van authenticatie via Apple (Sign In with Apple) op een iOS-app zijn de volgende stappen nodig:

  1. Configureer de app in het Apple Developer Portal:

    • Schakel de Capability "Sign In with Apple" in voor je App ID.
    • Genereer of werk het Provisioning Profile bij met ingeschakelde Capability.
  2. Voeg de Capability "Sign In with Apple" toe aan het Xcode-project.

  3. Gebruik het framework AuthenticationServices.

Voorbeeldcode voor het initiëren van een authenticatieverzoek:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Maak een provider
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Maak verzoeken
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Vraag naam en e-mail van de gebruiker

    // Maak een controller voor het verwerken van verzoeken
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Stel de delegates in voor het verwerken van antwoorden
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Start het authenticatieproces
    authorizationController.performRequests()
}

// Implementatie van delegates
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Verwerking van succesvolle authenticatie
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Unieke identifier van Apple-gebruiker
            let fullName = appleIDCredential.fullName // Naam van de gebruiker
            let email = appleIDCredential.email // E-mail van de gebruiker (alleen bij eerste login)

            // Hier kun je userIdentifier en andere gegevens naar je server sturen voor verificatie en accountcreatie/-koppeling
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Gebruiker heeft opgeslagen wachtwoorden uit iCloud Keychain gebruikt
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Hier kun je deze gegevens gebruiken voor login
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Verwerking van fout bij authenticatie
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple mislukt: \(error.localizedDescription)")
        // Hier verwerk je fouten (bijvoorbeeld gebruiker annuleert authenticatie)
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Biedt het venster waarop de authenticatie-interface wordt weergegeven
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Belangrijk: retourneer NIET nil window
    }
}

// TODO: Zorg dat YourViewController de benodigde protocollen implementeert.
  1. Verwerk de gegevens die na succesvolle authenticatie zijn verkregen:
    • Gebruik userIdentifier voor unieke identificatie van de Apple-gebruiker.
    • fullName en email zijn alleen beschikbaar bij de eerste login van deze gebruiker en jouw app. Sla ze op.
    • Stuur userIdentifier, identityToken (bevat verificatie-informatie voor de server) en authorizationCode naar je server voor verificatie en accountkoppeling.
    • De server moet "identityToken" verifiëren met Apple om de authenticiteit van het verzoek te bevestigen.

Naast de hoofdverificatie is het ook belangrijk om:

  • De status van de gebruiker te controleren via ASAuthorizationAppleIDProvider().getCredentialState.
  • Mogelijkheid tot intrekken van de authenticatie door de gebruiker.
  • Interactie met je backend voor het aanmaken / authenticeren van de gebruiker na succesvolle authenticatie via Apple.

Opmerking: Sign In with Apple is alleen beschikbaar op apparaten met iOS 13 / macOS Catalina en nieuwer. Voor oudere versies van het OS is een fallback authenticatiemechanisme vereist.