Guide pas à pas du SDK iOS/tvOS iostvos-sdk-cookbook
Introduction intro
Ce document décrit les processus de droits que l’application de niveau supérieur d’un programmeur peut mettre en oeuvre via les API exposées par la bibliothèque iOS/tvOS AccessEnabler.
La solution de droit d’authentification Adobe Pass pour iOS/tvOS est finalement divisée en deux domaines :
-
Domaine de l’interface utilisateur : il s’agit de la couche supérieure de l’application qui implémente l’interface utilisateur et qui utilise les services fournis par la bibliothèque AccessEnabler pour fournir l’accès au contenu restreint.
-
Domaine AccessEnabler : c'est là que les workflows de droits sont implémentés sous la forme :
- Appels réseau effectués sur les serveurs principaux d’Adobe
- Règles de logique métier liées aux workflows d’authentification et d’autorisation
- Gestion de diverses ressources et traitement de l’état du workflow (comme le cache de jeton)
L’objectif du domaine AccessEnabler est de masquer toutes les complexités des workflows de droits et de fournir à l’application de couche supérieure (via la bibliothèque AccessEnabler) un ensemble de primitives de droits simples avec lesquelles vous implémentez les workflows de droits :
- Définition de l’identité du demandeur
- Vérifier et obtenir une authentification auprès d’un fournisseur d’identité particulier
- Obtention de l’autorisation d’une ressource spécifique
- Déconnexion
- Flux d’authentification unique Apple par proxy de la structure Apple VSA
L’activité réseau d’AccessEnabler a lieu dans son propre thread, de sorte que le thread de l’interface utilisateur n’est jamais bloqué. Par conséquent, le canal de communication bidirectionnel entre les deux domaines d’application doit suivre un modèle entièrement asynchrone :
- La couche d’application de l’interface utilisateur envoie des messages au domaine AccessEnabler via les appels d’API exposés par la bibliothèque AccessEnabler.
- AccessEnabler répond à la couche de l’interface utilisateur par le biais des méthodes de rappel incluses dans le protocole AccessEnabler que la couche de l’interface utilisateur enregistre auprès de la bibliothèque AccessEnabler.
Configuration du service d’identification des Experience Cloud (identifiant visiteur) visitorIDSetup
La configuration de la valeur ID Experience Cloud est importante du point de vue Analytics. Une fois qu’une valeur visitorID
est définie, le SDK envoie ces informations avec chaque appel réseau et le serveur d’authentification Adobe Pass collecte ces informations. Vous pouvez mettre en relation les analyses du service d’authentification Adobe Pass avec tout autre rapport d’analyse que vous pouvez avoir à partir d’autres applications ou sites web. Vous trouverez des informations sur la configuration de visitorID ici.
Flux de droits entitlement
A. Conditions préalables
B. Flux de démarrage
C. Flux d’authentification avec Apple SSO
D. Flux d’authentification avec SSO Apple sur iOS
E. Flux d’authentification avec SSO Apple sur tvOS
F. Flux d’autorisation
G. Afficher le flux multimédia
H. Flux de déconnexion sans SSO Apple
I. Flux de déconnexion avec Apple SSO
A. Conditions préalables prereqs
-
Créez vos fonctions de rappel :
-
setRequestorComplete()
-
Déclenché par setRequestor(), renvoie succès ou échec.
-
La réussite indique que vous pouvez procéder à des appels de droits.
-
- Déclenché par
getAuthentication()
uniquement si l’utilisateur n’a pas sélectionné de fournisseur (MVPD) et n’est pas encore authentifié. - Le paramètre
mvpds
est un tableau de fournisseurs mis à la disposition de l’utilisateur.
- Déclenché par
-
setAuthenticationStatus(status, errorcode)
- Déclenché par
checkAuthentication()
à chaque fois. - Déclenché par
getAuthentication()
uniquement si l’utilisateur est déjà authentifié et a sélectionné un fournisseur. - L’état renvoyé est succès ou échec, le code d’erreur décrit le type de l’échec.
- Déclenché par
-
- Déclenché par
getAuthentication()
après que l’utilisateur a sélectionné un MVPD. Le paramètreurl
fournit l’emplacement de la page de connexion du MVPD.
- Déclenché par
-
sendTrackingData(event, data)
- Déclenché par
checkAuthentication()
,getAuthentication()
,checkAuthorization()
,getAuthorization()
,setSelectedProvider()
. - Le paramètre
event
indique quel événement de droit s’est produit ; le paramètredata
est une liste de valeurs relatives à l’événement.
- Déclenché par
-
setToken(token, resource)
- Déclenché par checkAuthorization() et getAuthorization() après une autorisation réussie d’afficher une ressource.
- Le paramètre
token
est le jeton multimédia de courte durée ; le paramètreresource
est le contenu que l’utilisateur est autorisé à afficher.
-
tokenRequestFailed(resource, code, description)
- Déclenché par checkAuthorization() et getAuthorization() après une autorisation manquée.
- Le paramètre
resource
est le contenu que l’utilisateur tentait de consulter ; le paramètrecode
est le code d’erreur indiquant le type d’échec survenu ; le paramètredescription
décrit l’erreur associée au code d’erreur.
-
selectedProvider(mvpd)
- Déclenché par
getSelectedProvider()
. - Le paramètre
mvpd
fournit des informations sur le fournisseur sélectionné par l’utilisateur.
- Déclenché par
-
setMetadataStatus(metadata, key, arguments)
- Déclenché par
getMetadata().
- Le paramètre
metadata
fournit les données spécifiques que vous avez demandées ; le paramètrekey
est la clé utilisée dans la requête getMetadata() ; et le paramètrearguments
est le même dictionnaire qui a été transmis à getMetadata().
- Déclenché par
-
preauthorizedResources(authorizedResources)
-
Déclenché par
checkPreauthorizedResources()
. -
Le paramètre
authorizedResources
présente les ressources que l’utilisateur
est autorisé à afficher.
-
-
presentTvProviderDialog(viewController)
- Déclenché par getAuthentication() lorsque le demandeur actuel prend en charge au moins sur MVPD qui prend en charge la SSO.
- Le paramètre viewController est la boîte de dialogue Apple SSO et doit être présenté sur le contrôleur de vue principal.
-
dismissTvProviderDialog(viewController)
- Déclenché par une action de l’utilisateur (en sélectionnant "Annuler" ou "Autres fournisseurs de télévision" dans la boîte de dialogue SSO Apple).
- Le paramètre viewController est la boîte de dialogue Apple SSO et doit être ignoré du contrôleur de vue principal.
-
B. Flux de démarrage startup_flow
-
Démarrez l'application de niveau supérieur.
-
Lancement de l’authentification Adobe Pass
a. Appelez
init
pour créer une instance unique de Adobe Pass Authentication AccessEnabler.- Dépendance : Authentification Adobe Pass natif iOS/bibliothèque tvOS (AccessEnabler)
b. Appelez
setRequestor()
pour établir l’identité du programmeur ; transmettez dans lerequestorID
du programmeur et (éventuellement) un tableau de points de terminaison d’authentification Adobe Pass. Pour tvOS, vous devrez également fournir la clé publique et le secret. Pour plus d’informations, consultez la documentation sans client .-
Dépendance : Demandeur d’authentification Adobe Pass valide (utiliser votre compte d’authentification Adobe Pass)
Gestionnaire pour arranger cela). -
Triggers :
Rappel setRequestorComplete().
note note NOTE Aucune demande de droit ne peut être effectuée tant que l’identité du demandeur n’a pas été entièrement établie. Cela signifie que, pendant que setRequestor()
est toujours en cours d’exécution, toutes les demandes de droits suivantes sont exécutées. Par exemple,checkAuthentication()
sont bloqués.Vous disposez de deux options d’implémentation : une fois que les informations d’identification du demandeur sont envoyées au serveur principal, la couche d’application de l’interface utilisateur peut choisir l’une des deux approches suivantes :
-
Attendez le déclenchement du rappel
setRequestorComplete()
(partie du délégué AccessEnabler). Cette option garantit la plus grande certitude quesetRequestor()
a été effectuée. Elle est donc recommandée pour la plupart des mises en oeuvre. -
Continuez sans attendre le déclenchement du rappel
setRequestorComplete()
et commencez à émettre des demandes de droits. Ces appels (checkAuthentication, checkAuthorization, getAuthentication, getAuthorization, checkPreauthorizedResource, getMetadata, logout) sont placés en file d’attente par la bibliothèque AccessEnabler qui effectuera les appels réseau réels après lesetRequestor()
. Cette option peut parfois être perturbée si, par exemple, la connexion réseau est instable.
-
Appelez
checkAuthentication()
pour rechercher une authentification existante sans initialiser le flux d’authentification complet. Si cet appel réussit, vous pouvez passer directement au flux d’autorisation. Si ce n’est pas le cas, passez au flux d’authentification.-
Dépendance : Appel réussi à setRequestor() (cette dépendance s’applique également à tous les appels suivants).
-
Triggers: setAuthenticationStatus() callback.
-
C. Flux d’authentification sans authentification unique Apple authn_flow_wo_applesso
-
Appelez
getAuthentication()
pour lancer le flux d’authentification ou pour obtenir la confirmation que l’utilisateur est déjà
authentifié.Triggers :
-
Rappel setAuthenticationStatus() si l’utilisateur est déjà authentifié. Dans ce cas, accédez directement au flux d’autorisation.
-
Rappel displayProviderDialog() si l’utilisateur n’est pas encore authentifié.
-
-
Présenter à l’utilisateur la liste des fournisseurs envoyés à
displayProviderDialog()
. -
Une fois que l’utilisateur a sélectionné un fournisseur, obtenez l’URL du MVPD de l’utilisateur à partir du rappel
navigateToUrl:
ounavigateToUrl:useSVC:
et ouvrez un contrôleurUIWebView/WKWebView
ouSFSafariViewController
et redirigez ce contrôleur vers l’URL. -
Par le biais de l’instance
UIWebView/WKWebView
ouSFSafariViewController
instanciée à l’étape précédente, l’utilisateur accède à la page de connexion du MVPD et saisit les informations de connexion. Plusieurs opérations de redirection ont lieu au sein du contrôleur.
null
comme paramètre. Cela permet à AccessEnabler de nettoyer son état interne et de réinitialiser le flux d’authentification.-
Lors d’une connexion réussie de l’utilisateur, votre couche d’application détecte le chargement d’une URL personnalisée spécifique. Notez que cette URL personnalisée spécifique n’est en fait pas valide et qu’elle n’est pas destinée à être réellement chargée par le contrôleur. Elle ne doit être interprétée que par votre application comme un signal que le flux d'authentification est terminé et qu'il est sûr de fermer le contrôleur
UIWebView/WKWebView
ouSFSafariViewController
. Dans le cas où unSFSafariViewController
contrôleur est nécessaire pour utiliser l’URL personnalisée spécifique est définie parapplication's custom scheme
(par exemple,adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com
), sinon cette URL personnalisée spécifique est définie par la constanteADOBEPASS_REDIRECT_URL
(c’est-à-direadobepass://ios.app
). -
Fermez le contrôleur UIWebView/WKWebView ou SFSafariViewController et appelez la méthode d’API
handleExternalURL:url
d’AccessEnabler, qui demande à AccessEnabler de récupérer le jeton d’authentification du serveur principal. -
(Facultatif) Appelez
checkPreauthorizedResources(resources)
pour vérifier les ressources que l’utilisateur est autorisé à afficher. Le paramètreresources
est un tableau de ressources protégées associées au jeton d’authentification de l’utilisateur. Une utilisation pour les informations d’autorisation obtenues à partir du MVPD de l’utilisateur consiste à décorer votre interface utilisateur (par exemple, des symboles verrouillés/déverrouillés en regard du contenu protégé).- Triggers:
preauthorizedResources()
callback - Point d’exécution : après le flux d’authentification terminé
- Triggers:
-
Si l’authentification a réussi, passez au flux d’autorisation.
D. Flux d’authentification avec SSO Apple sur iOS authn_flow_with_applesso
-
Appelez
getAuthentication()
pour lancer le flux d’authentification ou pour obtenir la confirmation que l’utilisateur est déjà authentifié.
Triggers :- Rappel presentTvProviderDialog() si l’utilisateur n’est pas authentifié et que le demandeur actuel a au moins sur MVPD qui prend en charge la connexion unique. Si aucun MVPD ne prend en charge l’authentification unique, le flux d’authentification classique est utilisé.
-
Une fois que l’utilisateur a sélectionné un fournisseur, la bibliothèque AccessEnabler obtient un jeton d’authentification avec les informations fournies par la structure VSA Apple.
-
Le rappel setAuthenticatiosStatus() sera déclenché. À ce stade, l’utilisateur doit être authentifié avec la connexion unique Apple.
-
[Facultatif] Appelez
checkPreauthorizedResources(resources)
pour vérifier les ressources que l’utilisateur est autorisé à afficher. Le paramètreresources
est un tableau de ressources protégées associées au jeton d’authentification de l’utilisateur. Une utilisation pour les informations d’autorisation obtenues à partir du MVPD de l’utilisateur consiste à décorer votre interface utilisateur (par exemple, les symboles verrouillés/déverrouillés en regard du contenu protégé).- Triggers:
preauthorizedResources()
callback - Point d’exécution : après le flux d’authentification terminé
- Triggers:
-
Si l’authentification a réussi, passez au flux d’autorisation.
E. Flux d’authentification avec SSO Apple sur tvOS authn_flow_with_applesso_tvOS
-
Appelez
getAuthentication()
pour lancer la
flux d’authentification ou pour obtenir la confirmation que l’utilisateur est déjà
authentifié.
Triggers :- Rappel
presentTvProviderDialog()
, si l’utilisateur n’est pas authentifié et que le demandeur actuel a au moins un MVPD qui prend en charge la connexion unique. Si aucun MVPD ne prend en charge l’authentification unique, le flux d’authentification classique est utilisé.
- Rappel
-
Une fois que l’utilisateur sélectionne un fournisseur, le rappel
status()
est appelé. Un code d’enregistrement est fourni et la bibliothèque AccessEnabler commence à interroger le serveur pour une authentification du second écran réussie. -
Si le code d’enregistrement fourni a été utilisé pour s’authentifier correctement sur le deuxième écran, le rappel
setAuthenticatiosStatus()
est déclenché. À ce stade, l’utilisateur doit être authentifié avec la connexion unique Apple. -
[Facultatif] Appelez
checkPreauthorizedResources(resources)
pour vérifier les ressources que l’utilisateur est autorisé à afficher. Le paramètreresources
est un tableau de ressources protégées associées au jeton d’authentification de l’utilisateur. Une utilisation pour les informations d’autorisation obtenues à partir du MVPD de l’utilisateur consiste à décorer votre interface utilisateur (par exemple, les symboles verrouillés/déverrouillés en regard du contenu protégé).-
Triggers:
preauthorizedResources()
callback -
Point d’exécution : après le flux d’authentification terminé
-
-
Si l’authentification a réussi, passez au flux d’autorisation.
F. Flux d’autorisation authz_flow
-
Appelez getAuthorization() pour lancer le flux d’autorisation.
- Dépendance : ID de ressource valide accepté avec le ou les MVPD.
- Les identifiants de ressource doivent être identiques à ceux utilisés sur d’autres appareils ou plateformes et seront identiques pour tous les MVPD. Pour plus d’informations sur les ID de ressource, voir Identification des ressources protégées
-
Validez l’authentification et l’autorisation.
-
Si l’appel getAuthorization() réussit : l’utilisateur dispose de jetons AuthN et AuthZ valides (l’utilisateur est authentifié et autorisé à regarder le média demandé).
-
Si getAuthorization() échoue : examinez l’exception générée pour déterminer son type (AuthN, AuthZ, etc.) :
- S’il s’agissait d’une erreur d’authentification (AuthN), redémarrez le flux d’authentification.
- S’il s’agissait d’une erreur d’autorisation (AuthZ), l’utilisateur n’est pas autorisé à regarder le média demandé et un message d’erreur de ce type doit s’afficher à l’utilisateur.
- En cas d'erreur d'un autre type (erreur de connexion, erreur réseau, etc.) puis afficher un message d’erreur approprié à l’utilisateur.
-
-
Validez le jeton de média court.
Utilisez la bibliothèque du vérificateur de jeton multimédia d’authentification Adobe Pass pour vérifier le jeton multimédia de courte durée renvoyé par l’appel getAuthorization() ci-dessus :- Si la validation réussit : lisez le média demandé pour l’utilisateur.
- Si la validation échoue : le jeton AuthZ n’était pas valide, la demande de média doit être refusée et un message d’erreur doit s’afficher à l’utilisateur.
-
Revenez à votre flux d’applications normal.
G. Afficher le flux multimédia media_flow
-
L’utilisateur sélectionne le média à afficher.
-
Les médias sont-ils protégés ? Votre application vérifie si le média sélectionné est protégé :
-
Si le média sélectionné est protégé, votre application démarre le flux d’autorisation ci-dessus.
-
Si le média sélectionné n’est pas protégé, lisez le média pour
l’utilisateur.
-
H. Flux de déconnexion sans SSO Apple logout_flow_wo_AppleSSO
-
Appelez
logout()
pour déconnecter l’utilisateur. AccessEnabler efface toutes les valeurs et tous les jetons mis en cache. Après avoir vidé le cache, AccessEnabler effectue un appel au serveur pour nettoyer les sessions côté serveur. Puisque l’appel au serveur peut entraîner une redirection SAML vers l’IdP (cela permet le nettoyage de session du côté IdP), cet appel doit suivre toutes les redirections. Pour cette raison, cet appel doit être traité dans un contrôleur UIWebView/WKWebView ou SFSafariViewController .a. Suivant le même modèle que le workflow d’authentification, le domaine AccessEnabler émet une requête à la couche d’application de l’interface utilisateur, via le rappel
navigateToUrl:
ounavigateToUrl:useSVC:
, pour créer un UIWebView/WKWebView ou SFSafariViewController et lui demander de charger l’URL fournie dans le paramètreurl
du rappel. Il s’agit de l’URL du point de terminaison de la déconnexion sur le serveur principal.b. Votre application doit surveiller l’activité du contrôleur
UIWebView/WKWebView or SFSafariViewController
et détecter le moment où elle charge une URL personnalisée spécifique lorsqu’elle passe par plusieurs redirections. Notez que cette URL personnalisée spécifique n’est en fait pas valide et qu’elle n’est pas destinée à être réellement chargée par le contrôleur. Elle ne doit être interprétée que par votre application comme un signal que le flux de déconnexion est terminé et qu’il est sûr de fermer le contrôleurUIWebView/WKWebView
ouSFSafariViewController
. Lorsque le contrôleur charge cette URL personnalisée spécifique, votre application doit fermer le contrôleurUIWebView/WKWebView or SFSafariViewController
et appeler la méthode d'APIhandleExternalURL:url
d'AccessEnabler. Dans le cas où unSFSafariViewController
contrôleur est nécessaire pour utiliser l’URL personnalisée spécifique est définie parapplication's custom scheme
(par exemple,adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com
), sinon cette URL personnalisée spécifique est définie par la constanteADOBEPASS_REDIRECT_URL
(c’est-à-direadobepass://ios.app
).note note NOTE Le flux de déconnexion diffère du flux d’authentification dans la mesure où l’utilisateur n’est pas tenu d’interagir de quelque manière que ce soit avec UIWebView/WKWebView ou SFSafariViewController. La couche de l’application de l’interface utilisateur utilise UIWebView/WKWebView ou SFSafariViewController pour s’assurer que toutes les redirections sont suivies. Par conséquent, il est possible (et recommandé) de rendre le contrôleur invisible (c’est-à-dire masqué) pendant le processus de déconnexion.