Obsah
- 1 Jak získat Apple autorizaci
- 2 Přidružte svůj web ke své aplikaci
- 3 Odstraňte přidružení k vaší aplikaci
- 4 Implementujeme Sign in with Apple – autorizační systém společnosti Apple
- 5 Nastavení účtu vývojáře Apple
- 6 Přidání tlačítka Přihlásit se pomocí Apple do aplikace pro iOS
- 7 Implementujeme přihlášení pomocí Apple pro web a Android
- 8 Získávání dat
- 9 První výsledky
Jak získat Apple autorizaci
Pomocí možnosti Přihlásit se pomocí Apple umožníte uživatelům přihlásit se na doprovodný web vaší aplikace pomocí svého Apple ID. Chcete-li nakonfigurovat webové ověřování, musíte vytvořit ID služeb a přidružit svůj web ke stávajícímu primárnímu ID aplikace pro iOS, macOS, tvOS nebo watchOS s povoleným přihlášením přes Apple.
Pokud jste zaregistrováni jako jednotlivci, můžete zaregistrovat až 10 adres URL webových stránek. Pokud jste zaregistrováni jako organizace, můžete zaregistrovat až 100 adres URL webových stránek. K dokončení procesu registrace domén a subdomén nemusíte nahrávat soubor na svůj server.
Přidružte svůj web ke své aplikaci
- V části Certifikáty, identifikátory a profily klikněte v postranním panelu na Identifikátory a poté klikněte na tlačítko Přidat (+) vlevo nahoře.
- Vyberte ID služeb a klikněte na Pokračovat.
- Zadejte popis ID služeb a zadejte jedinečný identifikátor.
- Zaregistrujte ID služeb a vyberte jej ze seznamu pro zahájení konfigurace.
- Vyberte Přihlásit se pomocí Apple a poté klikněte na Konfigurovat.
- V modálu, který se zobrazí, vyberte aplikaci ze seznamu primárních ID aplikací, která souvisí s vaším webem.
- V části Adresy URL webových stránek zadejte své domény, subdomény nebo návratové adresy URL jako seznam oddělený čárkami. Musíte zadat alespoň jednu doménu nebo subdoménu.
- Klepnutím na tlačítko Hotovo uložíte konfiguraci.
- Klikněte na tlačítko Pokračovat.
- Zkontrolujte konfiguraci a klikněte na Uložit.
Odstraňte přidružení k vaší aplikaci
- V části Certifikáty, identifikátory a profily klikněte v postranním panelu na Identifikátory a poté klikněte na tlačítko Přidat (+) vlevo nahoře.
- Z rozbalovací nabídky vpravo nahoře vyberte ID služeb.
- Vyberte ID služeb, které chcete z aplikace oddělit.
- Zrušte zaškrtnutí políčka Přihlásit se pomocí Apple a klikněte na Pokračovat.
- V modálu, který se zobrazí, klikněte na Uložit a potvrdit.
Po dokončení již nebudou přidružené adresy URL domény a návratové adresy URL seskupeny s aplikací. Přidružené služby budou ovlivněny zrušením přiřazení vaší domény.
Implementujeme Sign in with Apple – autorizační systém společnosti Apple
Letos v létě na WWDC 2019 Apple představil svůj vlastní autorizační systém Sign in with Apple a zavedl jej jako povinný pro všechny aplikace v App Store, které používají sociální přihlášení. Výjimkou jsou vzdělávací, podnikové, vládní a obchodní aplikace, které používají vlastní autorizaci. Společnost Apple vytvořila vysoce kvalitní dokumentaci pro přihlášení pomocí Apple a v tomto článku použijeme CIAN jako příklad, abychom vám řekli, jak jej implementovat do vaší služby.
Nastavení účtu vývojáře Apple
Práce na integraci začínají nastavením účtu vývojáře. Nejprve musíte povolit možnost Přihlásit se pomocí Apple pro vaše ID aplikace. Chcete-li to provést, přejděte na seznam identifikátorů v účtu Apple Developer Account, vyberte požadované ID aplikace a povolte pro něj možnost Přihlásit se pomocí Apple.
Nyní nastavíme Service ID – jedinečný identifikátor webové aplikace, který bude potřeba pro přístup k přihlášení pomocí Apple API. Pro každé ID aplikace můžete vytvořit až 5 ID služeb. Chcete-li to provést, klikněte na tlačítko pro vytvoření identifikátorů, vyberte Service ID, vyplňte požadovaná pole a klikněte na Upravit v poli Přihlásit se pomocí Apple. Otevře se formulář, kde vybereme správné Primární ID aplikace, zadáme webovou doménu a po úspěšném přihlášení vypíšeme URL pro přesměrování. Upozorňujeme, že můžete zadat pouze 10 návratových adres URL:
Pro uložení klikněte na Uložit, Pokračovat a Registrovat. Ano, při provádění jakýchkoli změn konfigurace musíte stisknout všechna tři tlačítka, jinak se změny neprojeví.
Nyní v seznamu Service ID vyberte vytvořený identifikátor a znovu klikněte na Upravit v poli Sign In With Apple. V okně, které se otevře, vedle pole webové adresy vidíme dvě nová tlačítka:
Tento soubor je vyžadován pro Apple k ověření vašeho zdroje. Stáhněte si jej a umístěte jej do svého zdroje. Tento trik nám hned nefungoval: když naši administrátoři přidali soubor, zadaná adresa URL spustila přesměrování (302) na soubor umístěný na jiném místě a Apple to neověřil. Pak jsem musel umístit soubor přes přímý přístup přes URL (200). Jakmile Apple úspěšně ověří soubor, objeví se vedle domény zelené zaškrtnutí:
V části identifikátory přejděte do části Klíče a vytvořte nový klíč. Chcete-li to provést, zaškrtněte políčko Přihlásit se pomocí Apple a nejprve kliknutím na Konfigurovat zkontrolujte ID aplikace a poté Pokračovat:
Na další obrazovce nezapomeňte stáhnout soubor s klíčem a uložit jej na bezpečné místo, protože po opuštění této obrazovky nebude klíč k dispozici ke stažení. Na stejné stránce můžete vidět ID klíče, které budeme stále potřebovat:
Pro uživatele má Sign In with Apple bonus: umožňuje vám poskytnout falešný e-mail, na který lze psát pouze z důvěryhodných adres. V tomto případě je nutná další konfigurace. Otevřete sekci Více, klikněte na Konfigurovat v sekci Přihlásit se Apple a zadejte svou adresu URL:
Přidání tlačítka Přihlásit se pomocí Apple do aplikace pro iOS
CIAN funguje na třech platformách: iOS, Android, Web. Existuje nativní SDK pro iOS, takže autorizace bude vypadat takto:
Chcete-li do aplikace pro iOS přidat Přihlášení přes Apple, přidejte tlačítko ASAutorizationAppleIDButton a připojte k němu obslužný program kliknutí:
let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests()
Kromě ASAuthorizationAppleIDProvider věnujte pozornost ASAuthorizationPasswordProvider, který vám umožňuje přijímat kombinace přihlašovacích hesel z Keychain.
Nyní implementujeme ASAuthorizationControllerPresentationContextProviding:
func presentationAnchor(pro řadič: ASAuthorizationController) -> ASPresentationAnchor
Vytváříme delegáta ASAuthorizationControllerDelegate, který hlásí úspěch nebo chybu:
public func authorizationController( controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization ) < guard let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential, let code = appleIDCredential.authorizationCode, let codeStr = String(data: code, encoding: .utf8) else < // что-то явно пошло не так // обработать как ошибку return >let email = appleIDCredential.email let firstName = appleIDCredential.fullName?.givenName let lastName = appleIDCredential.fullName?.familyName // создать или залогиниться в своей системе с помощью кода авторизации codeStr > public func authorizationController( controller: ASAuthorizationController, didCompleteWithError error: Error ) < // обработка ошибки >
Výsledný autorizační kód odešleme na server a čekáme na odpověď z backendu o úspěšnosti autorizace v našem systému.
Implementujeme přihlášení pomocí Apple pro web a Android
Najednou pro Android a Web Apple neposkytuje SDK, takže v obou případech musíte otevřít autorizační stránku od společnosti Apple a proces bude jiný:
Adresa URL přihlašovací stránky vypadá takto:
https://appleid.apple.com/auth/authorize? state=abvgd& response_type=code& client_id=ServiceID& scope=email+name& response_mode=form_post& redirect_uri=https%3A%2F%2Fcian.ru%2Fauth%2Fsome-callback%2F%3Ftype%3Dappleid
Podívejme se na jeho parametry:
- client_id — ID služby, které bylo zaregistrováno výše.
- redirect_uri – URI, kam je uživatel přesměrován po úspěšné autentizaci pomocí AppleID. Toto URI jsme specifikovali výše při nastavování Apple Developer.
- state je ID uživatelské relace, které Apple vrátí při volání redirect_uri, abychom mohli ověřit odesílatele. Pravidlo pro generování tohoto parametru si můžete vymyslet sami, například náhodný řetězec.
- rozsah – tento parametr určuje, jaké informace jsou od uživatele požadovány. Například jméno, e-mail nebo obojí najednou, jako v příkladu výše.
- response_type – tento parametr určuje typ požadované odpovědi. Může to být kód nebo id_token. Pokud vyberete id_token, musíte jej zadat pomocí parametru response_mode, ve kterém můžete zadat dotaz, fragment a form_post.
curl -X POST 'https://www.cian.ru/some-callback/?type=appleid' -H 'Content-Type: application/x-www-form-urlencoded' --data ' state=abvgd& code=12345& user=,"email":"someemail@gmail.com">'
Parametr kód obsahuje jednorázový ověřovací kód uživatele, který je platný 5 minut. Parametr state obsahuje identifikátor relace odeslaný při vytváření autorizačního formuláře a parametr user obsahuje uživatelská data.
Získávání dat
Chcete-li u všech klientů uložit uživatelská data, musíte od společnosti Apple získat access_token. Za tímto účelem nejprve požadujeme kód autorizace:
curl -X POST https://appleid.apple.com/auth/token -d ' client_id=some_client_id& code=12345& client_secret=jwt_part1.jwt_part2.jwt_part3& grant_type=authorization_code'
- client_id určuje ServiceID vytvořené pro webové aplikace a AppID pro aplikace iOS.
- kód – výše uvedené jsme obdrželi po přesměrování nebo přenesení z klienta iOS
- v parametru grant_type předáme účel získání tokenu: autorizaci (authorization_code) nebo obnovení tokenu (refresh_token)
- v parametru client_secret – JSON Web Tokens na základě tajného klíče obdrženého při registraci aplikace.
claims = < 'iss': APPLEID_TEAM_ID, 'aud': 'https://appleid.apple.com', 'sub': client_id, 'iat': current_timestamp, 'exp': current_timestamp + expire_period, >headers = client_secret = jwt.encode(payload=claims, key=secret_key, algorithm='ES256', headers=headers).decode('utf-8')
Pokud vše proběhlo v pořádku, odpověď bude obsahovat následující parametry:
Hurá, tady je access_token. Spolu s ním přichází refresh_token, který lze v případě potřeby použít k aktualizaci access_tokenu.
Informace o uživateli jsou uloženy v poli id_token, ale je třeba je dekódovat:
public_key = jwt.algorithms.RSAAlgorithm.from_jwk( json.dumps(apple_public_key) ) data = jwt.decode( id_token, public_key, algorithm="RS256", verify=True, audience=client_id, )
Apple_public_key je veřejný klíč, který lze získat z odkazu.
Po dekódování dostaneme:
data = < "iss": "https://appleid.apple.com", "aud": client_id, "exp": 1570379521, "iat": 1570378921, "sub": "уникальный идентификатор пользователя", "at_hash": "8ZDF6j786IQf9mA", "email": "someemail@gmail.com", "email_verified": "true", "auth_time": 1570378804 >
E-mail je odeslán pouze jednou, když se uživatel poprvé přihlásí do vaší služby prostřednictvím Přihlášení pomocí Apple. Příště Apple tato data přenese pouze v případě, že uživatel nezávisle odpojí vaši aplikaci. Zde se autentizace Applu liší od ostatních služeb, kde lze k datům přistupovat přes API, a nenašli jsme žádné informace o tom, že by něco podobného plánovali implementovat.
V této odpovědi potřebujeme parametry sub, které se zasílají pokaždé, a email, takže je uložíme do našeho systému a upozorníme klienta na úspěšnou autorizaci. ZISK.
První výsledky
Po vydání nové verze CIAN with Sign in with Apple hned první den tvořila třetinu nových registrací pro iOS 13 a nyní je pro všechny verze iOS na druhém místě za VK. Registrací pomocí AppleID je na stránce málo, ale jejich počet pomalu roste. A nyní plánujeme povolit autorizaci přes AppleID v aplikacích pro Android a uvidíme, kolik uživatelů se zaregistruje tak mazaným způsobem.
- Azurový firemní blog
- Vývoj webu
- Programování
- Vývoj iOS
- Rychlý