Apple SSO Cookbook (REST API V1) apple-sso-cookbook-rest-api-v1
De Adobe Pass Authentication REST API V1 biedt ondersteuning voor Single Sign-On (SSO) voor eindgebruikers van clienttoepassingen die op iOS, iPadOS of tvOS worden uitgevoerd.
Dit document doet dienst als uitbreiding aan de bestaande REST API V1 documentatie, die hierkan worden gevonden.
Cookbook apple-sso-cookbook-rest-api-v1-cookbook
Om van de gebruikerservaring van Apple te profiteren SSO, moet de toepassing het Video Kader van de Rekening van de Abonnee van de Abonneeintegreren dat door Apple wordt ontwikkeld, terwijl voor de Communicatie van de Authentificatie van Adobe Pass REST API V1, het de opeenvolging van hieronder voorgestelde stappen moet volgen.
Machtiging apple-sso-cookbook-rest-api-v1-permission
Settings -> TV Provider
op iOS en iPadOS of Settings -> Accounts -> TV Provider
op tvOS te gaan.Verificatie apple-sso-cookbook-rest-api-v1-authentication
- Is er een geldig teken van de Adobe authentificatie?
- Is de gebruiker het programma geopend via Partner SSO?
- Configuratie Adobe ophalen
- De werkstroom van SSO van de Partner met Adobe config in werking stellen
- Is gebruikersaanmelding geslaagd?
- Vraag een profielverzoek van Adobe voor geselecteerde MVPD
- Door:sturen het verzoek van de Adobe aan Partner SSO om het profiel te verkrijgen
- Uitwisseling het profiel van Partner SSO voor een teken van de Adobe authentificatie
- Is het genereren van een Adobe token gelukt?
- Regelmatige verificatieworkflow starten
- Doorgaan met autorisatiestromen
Stap: "Is er een geldig token voor Adobe-verificatie?" step1
Stap: "Is de gebruiker het programma geopend via Partner SSO?" step2
- De toepassing zou toestemming moeten controleren om totde het abonnementinformatie van de gebruiker toegang te hebben en slechts te werk te gaan als de gebruiker het toeliet.
- De toepassing zou a verzoekvoor de informatie van de abonneerekening moeten voorleggen.
- De toepassing zou de meta-gegevensinformatie moeten wachten en verwerken.
...
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.
...
}
}
...
Stap: "Configuratie Adobe ophalen" step3
enablePlatformServices
, boardingStatus
, displayInPlatformPicker
, platformMappingId
, requiredMetadataFields
en extra aandacht te besteden aan de commentaren die in codefragmenten van andere stappen worden voorgesteld.Stap "De werkschema van SSO van de Partner met Adobe config"initialiseren step4
- De toepassing zou toestemming moeten controleren om totde het abonnementinformatie van de gebruiker toegang te hebben en slechts te werk te gaan als de gebruiker het toeliet.
- De toepassing zou a afgevaardigdevoor VSAccountManager moeten verstrekken.
- De toepassing zou a verzoekvoor de informatie van de abonneerekening moeten voorleggen.
- De toepassing zou de meta-gegevensinformatie moeten wachten en verwerken.
...
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=nl) 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=nl) 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.
...
}
}
...
Stap: "Is gebruikersaanmelding geslaagd?" step5
vsaMetadata!.accountProviderIdentifier
geldig is en de huidige datum niet de waarde van vsaMetadata!.authenticationExpirationDate
heeft bereikt.Stap "verkrijg een profielverzoek van Adobe voor geselecteerde MVPD" step6
platformMappingId
in termen van de configuratie van de Authentificatie van Adobe Pass vertegenwoordigt. Daarom moet de toepassing de MVPD identiteitskaart bezitswaarde bepalen, gebruikend de platformMappingId
waarde, door het middel van de Authentificatie van Adobe Pass verstrekt de dienst MVPD LijstAPI.Stap: "Door:sturen het verzoek van de Adobe aan Partner SSO om het profiel"te verkrijgen step7
- De toepassing zou toestemming moeten controleren om totde het abonnementinformatie van de gebruiker toegang te hebben en slechts te werk te gaan als de gebruiker het toeliet.
- De toepassing zou a verzoekvoor de informatie van de abonneerekening moeten voorleggen.
- De toepassing zou de meta-gegevensinformatie moeten wachten en verwerken.
...
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=nl) 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=nl) 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.
...
}
}
...
Stap: "Uitwisseling het profiel van Partner SSO voor een teken van de Adobe authentificatie" step8
vsaMetadata!.samlAttributeQueryResponse!
vertegenwoordigt SAMLResponse
, die op Symbolische Uitwisselingmoet worden overgegaan en koordmanipulatie en het coderen vereist (Base64 gecodeerd en URL daarna gecodeerd) alvorens de vraag te maken.Stap: "Wordt het teken van de Adobe met succes geproduceerd?" step9
204 No Content
zal zijn, erop wijzend dat het teken met succes werd gecreeerd en klaar is om voor de vergunningsstromen te worden gebruikt.Stap: "Reguliere verificatieworkflow starten" step10
- De toepassing zou een registratiecodemoeten verkrijgen en het aan het eind voorleggen - gebruiker op het 1ste apparaat (scherm).
- De toepassing zou opiniepeiling moeten beginnen om de authentificatiestatusop het 1ste apparaat (scherm) te erkennen nadat de registratiecode wordt verkregen.
- Een andere toepassing zou authentificatie 🔗 op een 2de apparaat (scherm) moeten in werking stellen wanneer de registratiecode wordt gebruikt.
- De toepassing zou opiniepeilingop het eerste apparaat (scherm) moeten tegenhouden wanneer het authentificatietoken wordt geproduceerd.
- De toepassing zou een registratiecode 🔗 moeten verkrijgen die niet aan het eind - gebruiker op het 1ste apparaat (scherm) zou moeten worden voorgesteld.
- De toepassing zou authentificatie 🔗 op het eerste apparaat (scherm) in werking moeten stellen gebruikend de registratiecode en a WKWebViewof a SFSafariViewControllercomponent.
- De toepassing zou het opiniepeilen moeten beginnen om de authentificatiestatusop het 1ste apparaat (scherm) na WKWebViewof SFSafariViewControllercomponentensluiten te kennen.
- De toepassing zou opiniepeilingop het eerste apparaat (scherm) moeten tegenhouden wanneer het authentificatietoken wordt geproduceerd.
Stap: "Doorgaan met vergunningsstromen" step11
Afmelden apple-sso-cookbook-rest-api-v1-logout
Het Video Kader van de Rekening van de Abonnee van de Abonneeverstrekt geen API aan programmatically logout mensen die binnen aan hun de leveranciersrekening van TV op het niveau van het apparatensysteem hebben ondertekend. Daarom moet de eindgebruiker zich expliciet afmelden bij Settings -> TV Provider
op iOS/iPadOS of Settings -> Accounts -> TV Provider
op tvOS, anders wordt de aanmelding niet volledig van kracht. De andere mogelijkheid die de gebruiker zou hebben, is het intrekken van de machtiging om de abonnementsgegevens van de gebruiker te openen in het gedeelte met specifieke toepassingsinstellingen (toegang tot tv-provider).
- De toepassing zou moeten bepalen als de authentificatie als resultaat van aanmelding door partner SSO of niet is gebeurd, gebruikend "tokenSource" gebruikersmeta-gegevensvan de dienst van de Authentificatie van Adobe Pass.
- De toepassing zou de gebruiker moeten instrueren/ertoe aanzetten om uit
Settings -> Accounts -> TV Provider
op tvOS slechts uitdrukkelijk te ondertekenen in het geval dat de "tokenSource" waarde aan "Apple" gelijk is. - De toepassing zou de logout 🔗 van de dienst van de Authentificatie van Adobe Pass moeten in werking stellen gebruikend een directe vraag van HTTP. Dit zou sessieopruiming aan de MVPD-zijde niet vergemakkelijken.
- De toepassing zou moeten bepalen als de authentificatie als resultaat van aanmelding door partner SSO of niet is gebeurd, gebruikend "tokenSource" gebruikersmeta-gegevensvan de dienst van de Authentificatie van Adobe Pass.
- De toepassing zou de gebruiker moeten instrueren/ertoe aanzetten om uitdrukkelijk uit
Settings -> TV Provider
op iOS/iPadOS slechts te ondertekenen in het geval dat de "tokenSource" waarde aan "Apple" gelijk is. - De toepassing zou logout 🔗 van de dienst van de Authentificatie van Adobe Pass moeten in werking stellen gebruikend a WKWebViewof a SFSafariViewControllercomponent. Dit zou zittingsschoonmaak aan de kant van MVPD vergemakkelijken.