2016-04-18 10 views
2

Ich habe derzeit einen Login-Flow mit Facebook, der 100% funktioniert und ich habe Google einfach in die Gleichung eingefügt. Ich habe den Code so geschrieben, dass meine Google-Provider-Tokens genauso formatiert und zwischengespeichert werden wie meine Facebook-Token. Mein Code erhält die Facebook und Google-Token und macht das Folling: (das folgende Beispiel ist für die Google-Login):Azure mobileserviceclient Login gibt Authentifizierungsfehler zurück (401)

 USER_GOOGLE_TOKEN = new JsonObject(); 
     USER_GOOGLE_TOKEN.addProperty("access_token", accessToken); 
     cacheProviderToken(USER_GOOGLE_TOKEN.toString()); 
     setCurrentProvider("google"); 

Dann in meiner Authentifizierungsmethode in der Tätigkeit, hier ist, wie ich mobileserviceclient.login:

MobileServiceAuthenticationProvider provider = null; 
     if (getCurrentProvider().equals("facebook")){ 
      provider = MobileServiceAuthenticationProvider.Facebook; 
     } else if (getCurrentProvider().equals("google")) { 
      provider = MobileServiceAuthenticationProvider.Google; 
     } 


     token.addProperty("access_token", googleToken); 
     ListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google, getProviderToken()); 

Das Problem ist, dass Facebook funktioniert und Google produziert eine 401 nicht autorisiert. Der spezifische Fehler, den ich erhalte (bevor die Zukunft fehlschlägt), ist: W/DefaultRequestDirector: `Authentifizierungsfehler: Kann auf keine dieser Herausforderungen antworten: {}. Azure-Protokolle zeigen, dass es sich um ein nicht autorisiertes 401 handelt.

Ich drucke erfolgreich das Google-Anmelde-Token und formatiere es wie meine Facebook-Token, bevor ich versuche, sie zu verwenden. Sind meine Google-Schlüssel falsch? Ich habe sie schon einmal neu erstellt und habe versucht, Origins auf https zu setzen, habe verschiedene Schlüsselkombinationen ausprobiert und meine google-services.json sogar losgeworden (anscheinend ist das nicht nötig). Ich habe den Clientschlüssel nicht verwendet, der unter this google doc generiert wurde.

Eine weitere Frage hier ist, wie die Authentifizierungseinstellungen meiner Azure Mobile App ins Spiel kommen? Ich hatte ursprünglich mein Facebook konfiguriert, bevor ich von einem MobileService zu MobileApp migrierte, und jetzt muss ich die Funktion "Turnkey-Authentifizierung" nicht mehr verwenden, damit es funktioniert. Ich ging voran und gab meinen App-Schlüssel und mein Geheimnis für Facebook ein, aber es funktioniert definitiv unabhängig davon, ob dies aktiviert ist oder nicht. Ist das ein notwendiges Feature für oauth?

Auch Je nach dem Token-Format auf Anmeldung und der Ein/Aus-Status des Authentifizierungs-Funktion, die errror: W/DefaultRequestDirector: Authentication error: Unable to respond to any of these challenges: {} , wird Text in den geschweiften Klammern über dem azurblauen Endpunkt haben.

Vielen Dank, wenn Sie helfen können. So ein wählerisches Problem hier.

+0

Können Sie den letzten erarbeiten - über azur Endpunkt? Dieser Fehler ist grundsätzlich 401 und sollte nichts mit dem Azure haben. –

+0

Bei der Authentifizierung von mobilen Apps enthalten die geschweiften Klammern Informationen zu "Trägern", wenn ich die Einstellung "Was ist zu tun, wenn nicht authentifiziert" festlegen. Ich habe auch einige neue Informationen für Sie. Letzte Nacht bin ich ins klassische Portal gegangen und habe die Facebook-Strings gesehen, als ich die Authentifizierung im Tab "Identität" des mobilen Dienstes eingerichtet habe. Ich habe versucht, die Google-Werte im Konfigurationsbereich neben den Facebook-Werten zu codieren, da der Identifizierungsreiter weg ist. Es funktionierte nicht, obwohl die App "Auth" deaktiviert wurde. –

Antwort

2

Die App-Serviceauthentifizierung/-autorisierung ist mit einem migrierten mobilen Dienst nicht kompatibel und muss deaktiviert bleiben.

Um die Authentifizierungseinstellungen mit einem migrierten mobilen Dienst zu aktualisieren, legen Sie die App-Einstellungen fest. Für Facebook, das ist MS_FacebookAppID und MS_FacebookAppSecret. Für Google sind das MS_GoogleClientID und MS_GoogleClientSecret.

Als Referenz Besuche https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/#authentication

+0

Danke. Ihr Rat war kritisch, aber das Problem wurde nicht gelöst. [Dieser Blog] (https://azure.microsoft.com/en-us/blog/announcing-app-service-authentication-authorization/) enthält einen Autor-Kommentar als Antwort (Post # 2) auf ein ähnliches Problem. Ich bin mir nicht sicher, wie ich seinen Anweisungen folgen soll, aber ich habe versucht, eine mobile Service-Anmeldung (Google Provider) ohne Token-Parameter durchzuführen, und es wurde erfolgreich ein Benutzer in meinem Backend generiert.Ich habe erfolgreich einen Token und einen Zugriffscode von der Google-Antwort erhalten, also werden sie automatisch abgerufen? Ich habe sie dem mobilen Dienst nicht zur Verfügung gestellt ... –

+0

Wenn Sie eine Anmeldung für mobile Dienste ohne Token durchführen, handelt das Backend die Anmeldung aus und stellt dem Benutzer die normale Benutzeroberfläche zur Verfügung. Sie können auch eine Client-Anmeldung durchführen (bei der Sie das IdP-SDK verwenden und dann das Token während der Anmeldung für die mobile Dienste übermitteln). Entweder sollte es funktionieren. –

+0

Also, wenn ich einen Token oder Auth-Code (von Google) als Parameter in der Login-Methode eines mobilen Service-Client übergeben möchte, was sollte das Format sein? Ich habe alles versucht und immer Fehler zurückgegeben, wie in dem Blog erwähnt, den ich verlinkt habe. Ich habe versucht, ein Json-Objekt mit verschiedenen Feldern, der Token-String allein, Server-Auth-Code, usw., zu verwenden. Am Ende ließ ich es leer und war in der Lage, einen neuen authentifizierten mobilen Service-Benutzer und einen Benutzer in meinem Backend zu generieren. Worüber ich mir Sorgen mache ist, dass die MSclient ID nicht immer die gleiche/eindeutige ist, da ich kein OAuth-Token liefere. Ist das wahr? –

Verwandte Themen