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 "); }
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); } ' –