IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

S'authentifier avec un jeton de AccoutManager


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Par défaut S'authentifier avec un jeton de AccoutManager
    Bonsoir, j'essaye de changer l'authentification de mon application en utilisant oauth qui vient avec l'AccountManager de android pour ne pas avoir à gérer l'authentification de mes utilisateurs. Arriver à lister les comptes et en choisir un n'est pas un problème mais je dois ensuite obtenir un jeton "auth token" et je ne sais pas ce que je suis censé faire avec? Je dois surement l'envpoyer quelque part et le stocké dans l'app pour que les utilisateurs n'aient pas à se logger à chaque fois mais je ne trouve pas le fonctionnement de ce systeme après avoir consulter de nombreux tutoriels...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    package test.auth.activity;
     
     
    public class TestAuthActivity extends Activity {
     
    	String AUTH_TOKEN_TYPE = "Manage your tasks";//"oauth2:https://www.googleapis.com/auth/tasks"; / "oauth2:https://spreadsheets.google.com/feeds/";
    	Account account;
    	static final int DIALOG_ACCOUNTS = 0;
        AccountManager accountManager;
        Account[] accounts;
        //String token;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
     
    		Bundle options = new Bundle();
    		accountManager = AccountManager.get(this);
    		accounts = accountManager.getAccountsByType("com.google");
     
    	       setContentView(R.layout.main);			// j'affiche le XML de la page
     
    	       if(accounts.length > 1){
    	    	   showDialog(DIALOG_ACCOUNTS);	
     
    	       }else{
    	    	   account = accounts[0];
    	    	   System.out.println(account.name);
    	       }
     
    	       accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, options, this, new OnTokenAcquired(), null);
    	}
     
    	@Override
    	protected Dialog onCreateDialog(int id) {
     
    		switch (id) {
    	    case DIALOG_ACCOUNTS:
     
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	      builder.setTitle("Select a Google account");
    	      final int size = accounts.length;
    	      String[] names = new String[size];
    	      for (int i = 0; i < size; i++) {
    	        names[i] = accounts[i].name; // ID of the account
    	      }
    	      builder.setItems(names, new DialogInterface.OnClickListener() {
    	        public void onClick(DialogInterface dialog, int which) {
     
    	        	account = accounts[which];
    		    	   System.out.println(account.name);
    	        }
    	      });
    	      return builder.create();
     
    		}
     
    		return null;
    	}
     
    	private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
    	    @Override
    	    public void run(AccountManagerFuture<Bundle> result) {
    	        // Get the result of the operation from the AccountManagerFuture.
    	        Bundle bundle;
    			try {
    				bundle = result.getResult();
     
    		        // The token is a named value in the bundle. The name of the value
    		        // is stored in the constant AccountManager.KEY_AUTHTOKEN.
    		        String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
     
    		        Intent launch = (Intent) bundle.get(AccountManager.KEY_INTENT);
    		        if (launch != null) {
    		            startActivityForResult(launch, 0);
    		            return;
    		        }
     
    			} catch (OperationCanceledException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (AuthenticatorException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
     
    	    }
    	}
     
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Merci de ta réponse !

    Le truc que je ne comprends pas trop c'est qu'il faut faire des requetes http pour vérifier si le jeton est bon sur le serveur de google mais ca signifie donc que je mon internet doit etre actif à chaque authentification sur l'application ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben le jeton te permet de t'authentifier aupres des web-services de google (google apis) donc oui il faut l'internet actif, sinon cela n'a pas trop d'interêt....

    Que cherches tu à faire exactement ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Par défaut
    Je cherche juste à authentifier l'utilisateur, rien d'autre :S

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Mais l'authentifier où ?

    Sur le téléphone ? => pas besoin
    Sur un web-service google ? => c'est le système de tokens expliqué dans les exemples.
    Sur un web-service à toi ? => Tu peux faire du SSO de OAuth2... Mais que faire si l'utilisateur n'a pas de compte google ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Par défaut
    En fait mon application a une base de données interne sqlite et une externe sur un serveur mysql. Ce que j'aimerais c'est que le systeme d'authentification de mon app soit géré par oauth comme ca l'utilisateur n'a pas besoin de se créer un compte dédié à l'application mais un déjà existant (le compte google étant donné que tout android a au moins un compte google) et en plus de ne pas devoir gérer l'authentification du user on ne doit pas gérer les mots de passes dans la base de données mysql et sqlite

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par fakeclk Voir le message
    Ce que j'aimerais c'est que le systeme d'authentification de mon app soit géré par oauth comme ca l'utilisateur n'a pas besoin de se créer un compte dédié à l'application mais un déjà existant
    Ok, donc il y a deux choses:
    L'application du téléphone (qui utilise la base locale SQLite sans authentification puisque pas besoin de toute manière, et éventuellement une identification qui vient d'un compte google).
    L'application web-service qui va gérer la base MySQL (ou autre peu importe, ce qu'on voit c'est le web-service). Elle a besoin elle, d'avoir une méthode d'authentification forte (pour éviter que quelqu'un se fasse passer pour autrui).

    Cette authentification peut passer par du SSO ("Single Sign-On"), utilisation d'OpenID.... Pour l'instant il n'est pas question de OAuth encore... Il faut juste vérifier qu'un auth-token est correct, et savoir le décoder grace aux services de google.
    Cela peut passer par la création d'un couple id/secret pour l'application j'en sais pas plus.


    Là où OAuth entre en jeu c'est si l'application web-service va devoir se connecter (en arrière plan) a d'autres services comme google mail, google tasks, etc... Même chose vis à vis de Facebook....


    Et non, on n'est pas obligé d'avoir un compte google sur un Android.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Par défaut
    Mais si l'auth-token est correct l'authentification est ok et je n'ai qu'a vérifier ca la premiere fois que l'utilisateur s'inscris puis considérer qu'il ne doit plus jms s'authentifier ou quelque chose comme ca ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/10/2015, 09h52
  2. authentifie avec "Entreprise Manager" sql server 2k
    Par Bba_M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2006, 15h08
  3. Besoin de s'authentifier avec NET::HTTP + IIS NTLM
    Par vincnet dans le forum Modules
    Réponses: 9
    Dernier message: 27/07/2005, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo