2 votes

Demander plus d'une portée oauth2 par AccountManager dans Android

Je suis dans une situation où je dois demander des jetons d'accès pour deux scopes (à partir de mon application Android), https://www.googleapis.com/auth/userinfo.email y https://www.googleapis.com/auth/userinfo.userinfo

J'aimerais obtenir les deux autorisations en un seul appel à getAuthToken mais je n'arrive pas à trouver la chaîne de caractères à passer dans l'option authTokenType paramètre. J'ai essayé plusieurs combinaisons raisonnables, sans résultat positif :(

Quelqu'un a-t-il résolu ce problème ? Est-ce possible ?

10voto

toadzky Points 3728

J'avais le même problème. Shah a presque raison, mais sa chaîne de portée est fausse. Elle devrait être

"oauth2:<scope_url> <scope_url>"

no

"oauth2:<scope_url> oauth2:<scope_url>"

6voto

Mendhak Points 2504

Si vous avez besoin de plusieurs scopes OAuth 2.0, utiliser une liste séparée par des espaces .

oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.userinfo

Vous avez demandé un exemple de code, alors jetez un coup d'œil à la page Exemple de téléchargement de Google Docs et dans cette application, nous avons examiné le flux d'authentification effectué dans l'application cet exemple d'écran Android (ignorez qu'il s'agit de Google Docs, il autorise toujours d'abord). Vous pouvez obtenir l'application complète et l'exécuter dans un émulateur avec les API de Google présentes ou l'exécuter sur votre téléphone. Le flux de travail d'autorisation commence avec le clic sur le boutonAuthorize, Authorize() et vous êtes spécifiquement intéressé par cette méthode :

private void gotAccount(Account account)
{

    Bundle options = new Bundle();

    accountManager.getAuthToken(
            account,                     // Account retrieved using getAccountsByType()
            "oauth2:https://www.googleapis.com/auth/userinfo.email oauth2:https://www.googleapis.com/auth/userinfo.userinfo",            // Auth scope
            //"writely",            // Auth scope, doesn't work :(
            options,                        // Authenticator-specific options
            this,                           // Your activity
            new OnTokenAcquired(),          // Callback called when a token is successfully acquired
            null);    // Callback called if an error occurs
}

L'utilisateur obtient cet écran de demande d'accès :

enter image description here

Notez que vous utilisez le mécanisme OAuth2 "local", sans ouvrir de navigateur Web, mais en utilisant l'authentification fournie lors de la première activation du téléphone Android.

Notez également que l'utilisateur voit l'URL complète de l'étendue au lieu d'un nom amical, I n'ont pas trouvé un moyen de contourner ce problème et si vous le trouvez, ce serait formidable si vous pouviez partager la réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X