2016-04-18 1 views
0

Les étapes suivantes mentionnées ci-dessous pour obtenir le jeton d'annonce d'azur en utilisant adal AndroidADAL Android: Impossible d'analyser « id_token » de acquiretoken réponse si la portée est définie comme « offline_access openid »

  • Version: 2.0.1 -alpha
  • appelant la méthode suivante authcontext.acquireToken (contexte, la portée, la portée, additional_scope, EMAIL_SIGNIN_POLICY, client_id, redirect_uri, GetUserInfo(), PromptBehavior.Auto, "nux = 1 &", getCallback())

    • champ est défini comme "offline_access openid"
    • Lors du débogage de l'application ainsi que la bibliothèque, la réponse web réussie est reçue de Adal comme

    { "not_before": "****", « token_type ":" Porteur ", " id_token ":" **** ", " id_token_expires_in ":" **** ", " profile_info ":" **** ", " refresh_token ":" ** ** », "refresh_token_expires_in": "*****" }

mais quand adal parse cette réponse échoue car il fait référence ci-dessous conditon dans la bibliothèque adal

Oauth2.java 
if(mRequest.isIdTokenRequest()){ 
    expiresInLookUp = "idtoken_expires_in"; 
    token = response.get(AuthenticationConstants.OAuth2.ID_TOKEN); 
} 

AuthenticationRequest.java 
     boolean isIdTokenRequest() { 
      if (mScope != null && mScope.length != 0) { 
      for (String scope : mScope) { 
       if (scope.equalsIgnoreCase("openid") || scope.equalsIgnoreCase(mClientId)) { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
  • Modification du périmètre comme « OpenID » résultats en exception car elle renvoie la condition ci-dessous dans la bibliothèque

    AuthenticationContext.java

    si (set.contains ("openid")) { throw new IllegalArgumentException ( « API n'accepte pas Openid comme une utilisation champ d'application fourni "); }

Répondre

0

passe SEULEMENT id client en tant que champ d'exécuter le flux Openid.

mise à jour

Ce problème a été corrigé dans la version 2.0.2-alpha.

+0

Oui, capable d'obtenir avec succès le jeton. \t Mais si vous enregistrez le jeton, Adal le met en cache deux fois et la prochaine fois que le jeton du cache adal récupère l'exception ** Le cache a plusieurs entrées ** AuthorizationContext.java 'if (request.isIdTokenRequest()) {cacheItem.setScope (new String [] {request.getClientId()}); key.setScope (new String [] {request.getClientId()}); mTokenCacheStore.setItem (clé, cacheItem); } ' –

0

Nous passons déjà Openid dans le cadre pour vous dans nos kits de développement, ce qui est la raison pour laquelle nous avons prises pour vous assurer de ne pas passer à nouveau :-)

+0

Alors, quelle devrait être la valeur de la portée? 'openid' ou 'openid offline_access' ou 'valeur de l'ID client' –

+0

La valeur de l'ID client. Dans notre pensée, puisque vous obtenez un jeton uniquement pour vous et non pour une ressource, la meilleure façon de le démontrer est d'utiliser votre identifiant client, qui est «vous-même». Faites-moi savoir si vous l'obtenez au travail, et si oui marquez la réponse. Merci! –

+0

La transmission de l'étendue en tant qu'ID client récupère le jeton avec succès. –