Authentifier par programme pour Google avec OAuth2
Comment authentifier par programme pour Google?
Maintenant que ClientLogin (https://developers.google.com/accounts/docs/AuthForInstalledApps)
est obsolète, comment peut-on effectuer un programmatique de l'authentification de Google avec OAuth2?
Avec ClientLogin nous pourrions effectuer un post
https://www.google.com/accounts/ClientLogin
avec l'email et le mot de passe des paramètres et d'obtenir le jeton d'authentification.
Avec OAuth2 je ne peux pas trouver une solution!
#
Mon application java processus d'arrière-plan.
J'ai vu, en suivant ce lien: developers.google.com/accounts/docs/OAuth2InstalledApp#refresh comment obtenir un nouveau jeton d'accès à l'aide d'un jeton d'actualisation.
Le problème est que je ne peux pas trouver un exemple java sur la façon d'instancier une Analytique de l'objet (par exemple) pour effectuer une requête lorsque j'ai un nouveau jeton d'accès valide
C'est mon code qui renvoie un 401 informations d'identification non valides lors de l'appeler le "execute()":
public class Test {
static final String client_id = "MY_CLIENT_ID";
static final String client_secret = "MY_SECRET";
static final String appName = "MY_APP";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
static String access_token = "xxxx";
static String refreshToken = "yyyyy";
public static void main (String args[]){
try {
GoogleCredential credential =
new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(client_id, client_secret).build();
credential.setAccessToken(access_token);
credential.setRefreshToken(refreshToken);
//GoogleCredential
Analytics analytics = Analytics.builder(HTTP_TRANSPORT, JSON_FACTORY)
.setApplicationName(appName)
.setHttpRequestInitializer(credential)
.build();
Accounts accounts = analytics.management().accounts().list().execute();
} catch (Exception e) {
e.printStackTrace();
}
}
Quel est le problème?
- J'ai documenté un exemple d'utilisation de Javascript et de l'obtention d'un Jeton d'Autorisation ici alexroque.com/?p=307 j'espère que ça aide, Ce que vous voulez faire est de vous assurer notre retour URI est configuré correctement dans votre API console et que vous analyser le jeton correctement à partir de la réponse.
- pourriez-vous svp poster votre solution et comment il est résolu. Je suis face à un même problème
- pouvez-vous s'il vous plaît poster le code de votre solution.
- Pour ceux qui recherchent une solution, j'ai posté un comme une réponse stackoverflow.com/a/34561285/752167
Vous devez vous connecter pour publier un commentaire.
Vérifier l'authentification OAuth 2 flux pour l'Application Installée:
https://developers.google.com/accounts/docs/OAuth2InstalledApp
Il nécessite encore à l'utilisateur de s'authentifier avec un navigateur la première fois, mais ensuite, vous pouvez stocker le jeton d'actualisation et de l'utiliser pour les demandes suivantes.
Pour des solutions de rechange, vérifiez que le Dispositif d'écoulement ou de Comptes de Service, ils sont expliqués dans le même ensemble de documents.
J'ai trouvé le Google Java client d'être trop complexe et mal documentés. Voici pure et simple Servlet exemple avec Google Oauth2. Pour un processus d'arrière-plan, vous aurez besoin de demander access_type=hors ligne. Comme d'autres l'ont mentionné, vous avez besoin de l'utilisateur à faire une demande d'autorisation. Après cela, vous pouvez demander l'actualisation des jetons que google jetons à échéance en une heure.
Bien que j'apprécie que l'OP a été à l'origine de ciblage de l' OAuth2InstalledApp approche, je tiens à souligner une solution de travail à l'aide de la OAuth2WebServer approche. Ils ne diffèrent pas de façon significative et cela a fonctionné pour moi. J'ai trouvé le google OAuth bibliothèque être très bon, car il permettra de traiter la plupart des OAuth danse pour vous et il est facile à actualiser le jeton d'accès. La solution ci-dessous repose sur l'utilisation d'un pré-obtenu actualiser jeton.
Que l'on a accepté la réponse des états, pour obtenir l'authentification OAuth de travail (même pour un Java processus d'arrière-plan), où la demande s'appuie sur l'accès aux données de l'utilisateur
De précédents commentaires par l'OP, je vois les suivantes
La démarche que j'ai utilisée est plus comme
plus précisément, à l'aide de la google-api-java-client de la bibliothèque le code est assez simple et remarque que je n'ai pas mis un jeton d'accès que l'OP n'a, comme je l'appelle
credential.refreshToken();
ailleurs. (Je vérifie si j'ai un jeton d'accès valide déjà et si pas d'appel d'actualisation avant l'appel de l'API)Note ce couvre l'étape 2 de mon approche, et le
REFRESH_TOKEN
mentionné dans l'étape 1 peut être obtenu comme expliqué ci-dessous.Il y a d'abord un avant la mise en place d'un web app la création d'un OAuth 2.0 client ID sur le Google console pour les informations d'Identification où vous vous retrouvez avec un téléchargé le fichier json qui va être lu dans la
GoogleClientSecrets
objet.c'est à dire
Assurez-vous d'ajouter le Google aire de jeux rappel uri Autorisés redirect Uri
Alors vous avez votre identifiant client et le client secret prêt pour le terrain de jeu et vous pouvez également le télécharger au format json dont vous pouvez tirer dans votre code Java.
La
REFRESH_TOKEN
est obtenue par l'envoi d'une demande à l' google oauth aire de jeux avec la configuration suivante. Noter que, avant l'Étape 1 et de la sélection de votre portée, vous devez aller dans les paramètres pour vérifier que vous êtes en vous fournissant propres informations d'identification et d'ajouter votre identifiant client et de secret, juste en dessousNoter que le type d'Accès est en mode Hors connexion, ce qui correspond à cette.
Il ya aussi une belle explication sur l'accaparement de l'actualisation jeton ici https://www.youtube.com/watch?v=hfWe1gPCnzc
C'est assez pour y aller et une fois mis en place!
Concernant l'actualisation des jetons, vous devez être conscient de leur cycle de vie tel que discuté dans les docs ici
Dans le oauthplayground vous verrez ce
mais sur le point 4 de l'docs ici il dit que cette
Hmmm.
Pour référence, voir Comment puis-je autoriser une application (web ou installé) sans intervention de l'utilisateur? (canonique ?)
new InputStreamReader(OAuth2TestV2.class.getResourceAsStream("/client_secrets.json"),"UTF-8")
au lieu denew InputStreamReader(jsonFileResourceForClient.getInputStream());
Pour les applications qui s'authentifier au nom d'eux-mêmes (c'est à dire, pour une autre application, traditionnellement en vous connectant à un compte de rôle à l'aide d'un mot de passe partagé), le OAuth2 alternative à ClientLogin proposés par Google, c'est le Service des Comptes:
https://developers.google.com/accounts/docs/OAuth2ServiceAccount