Guía de Apple SSO (API de REST V1) apple-sso-cookbook-rest-api-v1

IMPORTANT
El contenido de esta página se proporciona únicamente con fines informativos. El uso de esta API requiere una licencia actual de Adobe. No se permite el uso no autorizado.

La API de REST de autenticación de Adobe Pass V1 es compatible con el inicio de sesión único (SSO) de socio para usuarios finales de aplicaciones cliente que se ejecutan en iOS, iPadOS o tvOS.

Este documento actúa como una extensión de la documentación de la API V1 de REST existente, que se puede encontrar aquí.

Guía apple-sso-cookbook-rest-api-v1-cookbook

Para beneficiarse de la experiencia del usuario de SSO de Apple, la aplicación necesita integrar el Marco de cuenta del suscriptor de vídeo desarrollado por Apple, mientras que para la comunicación de la API de REST de autenticación de Adobe Pass V1, debe seguir la secuencia de pasos que se presentan a continuación.

Permiso apple-sso-cookbook-rest-api-v1-permission

TIP
Sugerencia profesional: La aplicación de transmisión debe solicitar acceso a la información de suscripción del usuario guardada en el nivel de dispositivo, para lo cual el usuario debe dar permiso a la aplicación para continuar, de forma similar a proporcionar acceso a la cámara o al micrófono del dispositivo. Se debe solicitar este permiso por aplicación utilizando el marco de trabajo de cuenta de suscriptor de vídeo de Apple, y el dispositivo guardará la selección del usuario.
TIP
Consejo profesional: Recomendamos incentivar a los usuarios que se nieguen a dar permiso para acceder a la información de la suscripción explicando los beneficios de la experiencia del usuario de inicio único de sesión de Apple, pero tenga en cuenta que el usuario puede cambiar su decisión yendo a la configuración de la aplicación (acceso de permiso del proveedor de TV) o a Settings -> TV Provider en iOS y iPadOS o a Settings -> Accounts -> TV Provider en tvOS.
TIP
Sugerencia profesional: Se recomienda solicitar el permiso del usuario cuando la aplicación entre en el estado en primer plano, ya que la aplicación puede comprobar el permiso de acceso a la información de suscripción del usuario en cualquier momento antes de requerir la autenticación del usuario.

Autenticación apple-sso-cookbook-rest-api-v1-authentication

Paso: "¿Hay un token de autenticación de Adobe válido?" step1

TIP
Sugerencia: Implemente esto a través del medio del servicio de API de autenticación de Adobe Pass Comprobar testigo de autenticación.

Paso: "¿El usuario ha iniciado sesión mediante SSO de socio?" step2

TIP
Sugerencia: Implemente esto a través del Marco de cuenta de suscriptor de vídeo.
  • La aplicación tendría que comprobar si tiene permiso para acceder a la información de suscripción del usuario y continuar solo si el usuario lo permite.
  • La aplicación tendría que enviar una solicitud para obtener información de la cuenta del suscriptor.
  • La aplicación tendría que esperar y procesar la información de metadata.
TIP
Sugerencia profesional: Siga el fragmento de código y preste especial atención a los comentarios.
...
let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();

videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
            switch (accessStatus) {
            // The user allows the application to access subscription information.
            case VSAccountAccessStatus.granted:
                    // Construct the request for subscriber account information.
                    let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();

                    // This is actually the SAML Issuer not the channel ID.
                    vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";

                    // This is the subscription account information needed at this step.
                    vsaMetadataRequest.includeAccountProviderIdentifier = true;

                    // This is the subscription account information needed at this step.
                    vsaMetadataRequest.includeAuthenticationExpirationDate = true;

                    // This is going to make the Video Subscriber Account Framework to refrain from prompting the user with the providers picker at this step.
                    vsaMetadataRequest.isInterruptionAllowed = false;

                    // Submit the request for subscriber account information - accountProviderIdentifier.
                    videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                        if (vsaMetadata != nil && vsaMetadata!.accountProviderIdentifier != nil) {
                            // The vsaMetadata!.authenticationExpirationDate will contain the expiration date for current authentication session.
                            // The vsaMetadata!.authenticationExpirationDate should be compared against current date.
                            ...
                            // The vsaMetadata!.accountProviderIdentifier will contain the provider identifier as it is known for the platform configuration.
                            // The vsaMetadata!.accountProviderIdentifier represents the platformMappingId in terms of Adobe Pass Authentication configuration.
                            ...
                            // The application must determine the MVPD id property value based on the platformMappingId property value obtained above.
                            // The application must use the MVPD id further in its communication with Adobe Pass Authentication services.
                            ...
                            // Continue with the "Obtain a profile request from Adobe for the selected MVPD" step.
                            ...
                            // Continue with the "Forward the Adobe request to Partner SSO to obtain the profile" step.
                            ...
                        } else {
                            // The user is not authenticated at platform level, continue with the "Fetch Adobe configuration" step.
                            ...
                        }
                    }

            // The user has not yet made a choice or does not allow the application to access subscription information.
            default:
                // Continue with the "Initiate regular authentication workflow" step.
                ...
            }
}
...

Paso: "Recuperar configuración de Adobe" step3

TIP
Sugerencia: Implemente esto a través del medio de la autenticación de Adobe Pass Proporcione el servicio de API MVPD List.
TIP
Sugerencia profesional: Tenga en cuenta las propiedades de MVPD: enablePlatformServices, boardingStatus, displayInPlatformPicker, platformMappingId, requiredMetadataFields y preste especial atención a los comentarios presentados en fragmentos de código de otros pasos.

Paso "Iniciar flujo de trabajo de SSO de socio con configuración de Adobe" step4

TIP
Sugerencia: Implemente esto a través del Marco de cuenta de suscriptor de vídeo.
  • La aplicación tendría que comprobar si tiene permiso para acceder a la información de suscripción del usuario y continuar solo si el usuario lo permite.
  • La aplicación tendría que proporcionar un delegado para VSAccountManager.
  • La aplicación tendría que enviar una solicitud para obtener información de la cuenta del suscriptor.
  • La aplicación tendría que esperar y procesar la información de metadata.
TIP
Sugerencia profesional: Siga el fragmento de código y preste especial atención a los comentarios.
    ...
    let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();

    // This must be a class implementing the VSAccountManagerDelegate protocol.
    let videoSubscriberAccountManagerDelegate: VideoSubscriberAccountManagerDelegate = VideoSubscriberAccountManagerDelegate();

    videoSubscriberAccountManager.delegate = videoSubscriberAccountManagerDelegate;

    videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
                switch (accessStatus) {
                // The user allows the application to access subscription information.
                case VSAccountAccessStatus.granted:
                        // Construct the request for subscriber account information.
                        let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();

                        // This is actually the SAML Issuer not the channel ID.
                        vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";

                        // This is the subscription account information needed at this step.
                        vsaMetadataRequest.includeAccountProviderIdentifier = true;

                        // This is the subscription account information needed at this step.
                        vsaMetadataRequest.includeAuthenticationExpirationDate = true;

                        // This is going to make the Video Subscriber Account Framework to prompt the user with the providers picker at this step.
                        vsaMetadataRequest.isInterruptionAllowed = true;

                        // This can be computed from the [Adobe Pass Authentication](https://experienceleague.adobe.com/docs/pass/authentication/programmer-integration-guide/rest-api-v1/rest-api-reference/provide-mvpd-list.html?lang=es) service response in order to filter the TV providers from the Apple picker.
                        vsaMetadataRequest.supportedAccountProviderIdentifiers = supportedAccountProviderIdentifiers;

                        // This can be computed from the [Adobe Pass Authentication](https://experienceleague.adobe.com/docs/pass/authentication/programmer-integration-guide/rest-api-v1/rest-api-reference/provide-mvpd-list.html?lang=es) service response in order to sort the TV providers from the Apple picker.
                        if #available(iOS 11.0, tvOS 11, *) {
                            vsaMetadataRequest.featuredAccountProviderIdentifiers = featuredAccountProviderIdentifiers;
                        }

                        // Submit the request for subscriber account information - accountProviderIdentifier.
                        videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                            // This represents the checks for the "Is user login successful?" step.
                            if (vsaMetadata != nil && vsaMetadata!.accountProviderIdentifier != nil) {
                                // The vsaMetadata!.authenticationExpirationDate will contain the expiration date for current authentication session.
                                // The vsaMetadata!.authenticationExpirationDate should be compared against current date.
                                ...
                                // The vsaMetadata!.accountProviderIdentifier will contain the provider identifier as it is known for the platform configuration.
                                // The vsaMetadata!.accountProviderIdentifier represents the platformMappingId in terms of Adobe Pass Authentication configuration.
                                ...
                                // The application must determine the MVPD id property value based on the platformMappingId property value obtained above.
                                // The application must use the MVPD id further in its communication with Adobe Pass Authentication services.
                                ...
                                // Continue with the "Obtain a profile request from Adobe for the selected MVPD" step.
                                ...
                                // Continue with the "Forward the Adobe request to Partner SSO to obtain the profile" step.
                                ...
                            } else {
                                // The user is not authenticated at platform level.
                                if (vsaError != nil) {
                                    // The application can check to see if the user selected a provider which is present in Apple picker, but the provider is not onboarded in platform SSO.
                                    if let error: NSError = (vsaError! as NSError), error.code == 1, let appleMsoId = error.userInfo["VSErrorInfoKeyUnsupportedProviderIdentifier"] as! String? {
                                        var mvpd: Mvpd? = nil;

                                        // The requestor.mvpds must be computed during the "Fetch Adobe configuration" step.
                                        for provider in requestor.mvpds {
                                            if provider.platformMappingId == appleMsoId {
                                                mvpd = provider;
                                                break;
                                            }
                                        }

                                        if mvpd != nil {
                                            // Continue with the "Initiate regular authentication workflow" step, but you can skip prompting the user with your MVPD picker and use the mvpd selection, therefore creating a better UX.
                                            ...
                                        } else {
                                            // Continue with the "Initiate regular authentication workflow" step.
                                            ...
                                        }
                                    } else {
                                        // Continue with the "Initiate regular authentication workflow" step.
                                        ...
                                    }
                                } else {
                                    // Continue with the "Initiate regular authentication workflow" step.
                                    ...
                                }
                            }
                        }

                // The user has not yet made a choice or does not allow the application to access subscription information.
                default:
                    // Continue with the "Initiate regular authentication workflow" step.
                    ...
                }
    }
    ...

Paso: "¿El inicio de sesión del usuario se ha realizado correctamente?" step5

TIP
Sugerencia profesional: Tenga en cuenta el fragmento de código del paso "Iniciar flujo de trabajo de SSO de socio con configuración de Adobe". El inicio de sesión del usuario se realiza correctamente en el caso de que vsaMetadata!.accountProviderIdentifier contenga un valor válido y la fecha actual no haya pasado el valor vsaMetadata!.authenticationExpirationDate.

Paso "Obtener una solicitud de perfil del Adobe para la MVPD seleccionada" step6

TIP
Sugerencia: Implemente esto a través del servicio de API de autenticación de Adobe Pass Solicitud de perfil.
TIP
Sugerencia profesional: Tenga en cuenta que el identificador de proveedor obtenido del marco de trabajo de cuenta de suscriptor de vídeo representa a platformMappingId en términos de la configuración de autenticación de Adobe Pass. Por lo tanto, la aplicación debe determinar el valor de la propiedad MVPD id, usando el valor platformMappingId, a través del medio del servicio de API Adobe Pass Authentication Provider MVPD List.

Paso: "Reenviar la solicitud de Adobe al SSO del socio para obtener el perfil" step7

TIP
Sugerencia: Implemente esto a través del Marco de cuenta de suscriptor de vídeo.
  • La aplicación tendría que comprobar si tiene permiso para acceder a la información de suscripción del usuario y continuar solo si el usuario lo permite.
  • La aplicación tendría que enviar una solicitud para obtener información de la cuenta del suscriptor.
  • La aplicación tendría que esperar y procesar la información de metadata.
TIP
Sugerencia profesional: Siga el fragmento de código y preste especial atención a los comentarios.
    ...
    let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();

    videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
                switch (accessStatus) {
                // The user allows the application to access subscription information.
                case VSAccountAccessStatus.granted:
                        // Construct the request for subscriber account information.
                        let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();

                        // This is actually the SAML Issuer not the channel ID.
                        vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";

                        // This is going to include subscription account information which should match the provider determined in a previous step.
                        vsaMetadataRequest.includeAccountProviderIdentifier = true;

                        // This is going to include subscription account information which should match the provider determined in a previous step.
                        vsaMetadataRequest.includeAuthenticationExpirationDate = true;

                        // This is going to make the Video Subscriber Account Framework to refrain from prompting the user with the providers picker at this step.
                        vsaMetadataRequest.isInterruptionAllowed = false;

                        // This are the user metadata fields expected to be available on a successful login and are determined from the [Adobe Pass Authentication](https://experienceleague.adobe.com/docs/pass/authentication/programmer-integration-guide/rest-api-v1/rest-api-reference/provide-mvpd-list.html?lang=es) service. Look for the requiredMetadataFields associated with the provider determined in a previous step.
                        vsaMetadataRequest.attributeNames = requiredMetadataFields;

                        // This is the payload from [Adobe Pass Authentication](https://experienceleague.adobe.com/docs/pass/authentication/programmer-integration-guide/rest-api-v1/rest-api-reference/retrieve-profilerequest.html?lang=es) service.
                        vsaMetadataRequest.verificationToken = profileRequestPayload;

                        // Submit the request for subscriber account information.
                        videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                            if (vsaMetadata != nil && vsaMetadata!.samlAttributeQueryResponse != nil) {
                                var samlResponse: String? = vsaMetadata!.samlAttributeQueryResponse!;

                                // Remove new lines, new tabs and spaces.
                                samlResponse = samlResponse?.replacingOccurrences(of: "[ \\t]+", with: " ", options: String.CompareOptions.regularExpression);
                                samlResponse = samlResponse?.components(separatedBy: CharacterSet.newlines).joined(separator: "");
                                samlResponse = samlResponse?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines);

                                // Base64 encode.
                                samlResponse = samlResponse?.data(using: .utf8)?.base64EncodedString(options: []);

                                // URL encode. Please be aware not to double URL encode it further.
                                samlResponse = samlResponse?.addingPercentEncoding(withAllowedCharacters: CharacterSet.init(charactersIn: "!*'();:@&=+$,/?%#[]").inverted);

                                // Continue with the "Exchange the Partner SSO profile for an Adobe authentication token" step.
                                ...
                            } else {
                                // Continue with the "Initiate regular authentication workflow" step.
                                ...
                            }
                        }

                // The user has not yet made a choice or does not allow the application to access subscription information.
                default:
                    // Continue with the "Initiate regular authentication workflow" step.
                    ...
                }
    }
    ...

Paso: "Intercambio del perfil SSO del socio por un token de autenticación de Adobe" step8

TIP
Sugerencia: Implemente esto a través del servicio de API de autenticación de Adobe Pass Intercambio de tokens.
TIP
Sugerencia profesional: Tenga en cuenta el fragmento de código del "Reenviar la solicitud de Adobe al SSO del socio para obtener el paso del perfil". Este(a) vsaMetadata!.samlAttributeQueryResponse! representa el(la) SAMLResponse, que debe pasarse en Intercambio de tokens y requiere manipulación de cadenas y codificación (Codificado(a) Base64 y codificado(a) URL posteriormente) antes de realizar la llamada.

Paso: "¿El token de Adobe se ha generado correctamente?" step9

TIP
Sugerencia: Implemente esto a través del medio de la respuesta correcta de autenticación de Adobe Pass Intercambio de tokens, que será una respuesta correcta de 204 No Content, lo que indica que el token se creó correctamente y está listo para utilizarse en los flujos de autorización.

Paso: "Iniciar flujo de trabajo de autenticación regular" step10

TIP
Sugerencia: Implemente esto a través del medio de la autenticación de Adobe Pass Solicitud de código de registro, Iniciar autenticación y Recuperar token de autenticación o Comprobar token de autenticación servicios de API.
TIP
Sugerencia profesional: Siga los pasos descritos a continuación para las implementaciones de tvOS.
TIP
Sugerencia profesional: Siga los pasos descritos a continuación para las implementaciones de iOS/iPadOS.

Paso: "Continuar con los flujos de autorización" step11

TIP
Sugerencia: Implemente esto a través del medio de autenticación de Adobe Pass Iniciar autorización y Obtener token de medios corto servicios de API.

Cerrar sesión apple-sso-cookbook-rest-api-v1-logout

El marco de cuenta de suscriptor de vídeo no proporciona una API para cerrar la sesión mediante programación de las personas que han iniciado sesión en su cuenta de proveedor de TV en el nivel de sistema del dispositivo. Por lo tanto, para que el cierre de sesión surta efecto, el usuario final tendría que cerrar sesión explícitamente desde Settings -> TV Provider en iOS/iPadOS o Settings -> Accounts -> TV Provider en tvOS. La otra opción que tendría el usuario es retirar el permiso para acceder a la información de suscripción del usuario desde la sección de configuración específica de la aplicación (acceso al proveedor de TV).

TIP
Sugerencia: Implemente esto a través del medio de la autenticación de Adobe Pass Llamada de metadatos de usuario y los servicios de API Cerrar sesión.
TIP
Sugerencia profesional: Siga los pasos descritos a continuación para las implementaciones de tvOS.
  • La aplicación tendría que determinar si la autenticación se ha producido como resultado de un inicio de sesión a través del SSO del socio o no, utilizando los "tokenSource" metadatos de usuario del servicio de autenticación de Adobe Pass.
  • La aplicación tendría que indicar o pedir al usuario que cierre sesión explícitamente desde Settings -> Accounts -> TV Provider en tvOS solo en caso de que el valor "tokenSource" sea igual a "Apple".
  • La aplicación tendría que iniciar el cierre de sesión desde el servicio de autenticación de Adobe Pass usando una llamada HTTP directa. Esto no facilitaría la limpieza de la sesión en el lado de MVPD.
TIP
Sugerencia profesional: Siga los pasos descritos a continuación para las implementaciones de iOS/iPadOS.
  • La aplicación tendría que determinar si la autenticación se ha producido como resultado de un inicio de sesión a través del SSO del socio o no, utilizando los "tokenSource" metadatos de usuario del servicio de autenticación de Adobe Pass.
  • La aplicación tendría que indicar o pedir al usuario que cierre sesión explícitamente desde Settings -> TV Provider en iOS/iPadOS solo en caso de que el valor "tokenSource" sea igual a "Apple".
  • La aplicación tendría que iniciar el cierre de sesión desde el servicio de autenticación de Adobe Pass usando un WKWebView o un componente SFSafariViewController. Esto facilitaría la limpieza de la sesión en el lado de MVPD.
recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b