2017-08-30 2 views
1

J'ai commencé à utiliser l'application Azure-Samples/active-directory-b2c-ios-swap-native-msal pour faire la démonstration des fonctionnalités de notre locataire Azure B2C. J'ai tout travaillé en dehors de la fonctionnalité de jeton d'actualisation. J'ai ajouté la portée "offline_access" pour m'assurer que le jeton d'actualisation est fourni.Fonctionnalité de jeton de rafraîchissement Azure B2C ne fonctionnant pas dans iOS Exemple d'application Swift

La première erreur que je suis:

User Nil error

let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority) 
let thisUser = try self.getUserByPolicy(withUsers: application.users(), forPolicy: kSignupOrSigninPolicy) 

application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in 
if error == nil { 
self.accessToken = (result?.accessToken)! 
self.loggingText.text = "Refreshing token silently" 
self.loggingText.text = "Refreshed Access token is \(self.accessToken)" 

      } 

J'ai donc essayé de stocker l'utilisateur MSAL de l'autorisation initiale et passé dans la méthode AcquireTokenSilent.

Je reçois cette erreur:

Failed to find any access token error

let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority) 
let thisUser = userFromAuth 

    application.acquireTokenSilent(forScopes: kScopes, user: thisUser) { (result, error) in 
      if error == nil { 
       self.accessToken = (result?.accessToken)! 
       self.loggingText.text = "Refreshing token silently" 
       self.loggingText.text = "Refreshed Access token is \(self.accessToken)" 

      } 

Enfin, j'ai essayé d'ajouter l'autorité/politique utilisée dans le SignUp/SignIn (appel initial auth) dans le AcquireTokenSilent et je reçois cette erreur :

Je reçois: "Aucun jeton correspondant à ces arguments trouvés dans le cache." (Je ne me laisse pas poster un 3ème lien)

let application = try MSALPublicClientApplication.init(clientId: kClientID, authority: kAuthority) 
let thisUser = userFromAuth 

    application.acquireTokenSilent(forScopes: kScopes, user: thisUser, authority: kAuthority) { (result, error) in 
      if error == nil { 
       self.accessToken = (result?.accessToken)! 
       self.loggingText.text = "Refreshing token silently" 
       self.loggingText.text = "Refreshed Access token is \(self.accessToken)" 

      }  

J'ai testé la fonctionnalité jeton de rafraîchissement dans l'exemple d'application Android et je suis capable de rafraîchir avec succès le jeton, donc je ne pense pas que la question est partout dans notre B2C. J'ai également lu que la bibliothèque MSAL gère l'actualisation différemment de la bibliothèque AppAuth utilisée dans les exemples Android et Obj-C, donc je ne suis pas sûr s'il y a quelque chose qui me manque.

Un aperçu de ce qui pourrait être faux serait génial!

+0

Ajout de la capture d'écran, il ne me laisserait pas publier dans les questions: [3e capture d'écran d'erreur.] (Http://imgur.com/YgNluPc) –

+0

Pouvez-vous poster votre résolution dans la boîte de réponse (afin que nous puissions assurer que cette question a été répondue et que je peux la changer) – Parakh

Répondre

0

J'ai compris. L'identificateur d'utilisateur est renvoyé avec le nom de la politique en minuscules (ex: 56d56ec5-96a9-4c23-9717-4ae5d86f967c-b2c_1_policy), de sorte qu'il ne trouvera pas l'utilisateur (et le jeton) si vous avez des lettres majuscules.

Je l'ai fixé en ajoutant .lowercased() à la fin de la chaîne de forPolicy dans la méthode getUserByPolicy:

for user in withUsers { 
    if (user.userIdentifier().components(separatedBy: ".")[0].hasSuffix(forPolicy.lowercased())) { 
     return user 
    }  
} 

devait aussi être sûr d'être sur la dernière version de Xcode (8.3.3) .