0

Identity Toolkit für Websites v3 bietet Autorisierungscode signInSuccess Callback tokenString Argument.Identity Toolkit für Websites v3 hinzufügen access_type = offline, um Parameterwert fortzusetzen?

Obwohl //www.gstatic.com/authtoolkit/js/gitkit.js ist verschleiern und nicht dokumentierte, fand ich .gstatic.com/authtoolkit/js/gitkit-debug.js Welche helfen sollte, aber ich bin immer noch neugierig wenn es einen besseren Weg gibt oder wenn ich etwas verpasse.

Das Problem ist, ich kann keinen Weg finden, Parameter access_type = offline zu setzen, so kann ich kein Aktualisierungstoken erhalten, so Google API Client Library for Java, Post-Login mit idp google.com scheint keine Option zu sein. Ich kann es nicht mit der föderierten Anmeldelösung anbieten. Ich muss den google provider oauth flow separat implementieren ... ich kann nicht glauben, dass mir hier etwas fehlen muss.

Was ist der Punkt der Bereitstellung von Zugriff auf den Autorisierungscode in der URL #, wenn ich es nicht für den Zugriff auf andere Google APIs verwenden kann.

In jedem Fall hatte jemand im Jahr 2012 das gleiche Problem eine Lösung wurde für v1 in [this] [2] Forum Diskussion zur Verfügung gestellt.

Die Antwort beginnt mit "Different IdP hat verschiedene Möglichkeiten, ein Refresh-Token zu erhalten, dh für Microsoft ist ein" wl.offline_access "-Bereich erforderlich, für Google ist ein URL-Parameter" access_type = offline "erforderlich GITKit hat noch keinen normalisierten Weg dafür, aber wir untersuchen es. "

Wenn sie sich 2012 damit beschäftigt haben, gibt es sicherlich eine Art Ansatz ... auf jeden Fall ist meine Anforderung momentan nur auf Google APIs zuzugreifen.

den Fluss von google oauth Spielplatz So vergleichen, wo man access_type = offline und die Kontoauswahl URL weiterhin auswählen ... sieht aus wie dieses

https://accounts.google.com/AccountChooser?continue=https://accounts.google.com/o/oauth2/auth? 
access_type=offline 
&approval_prompt=force 
&scope=https://www.googleapis.com/auth/cloudprint+https://www.googleapis.com/auth/userinfo.profile 
&response_type=code 
&redirect_uri=https://developers.google.com/oauthplayground 
&client_id=407408718192.apps.googleusercontent.com 
&hl=en-GB 
&from_login=1 
&as=5cc2df3c88f13395 
&ltmpl=popup 
&btmpl=authsub 
&hl=en_GB 
&scc=1 
&oauth=1 

Wo Sie die access_type Paramater sehen. Ich fügte gitkit-debug.js einige zusätzliche Konfigurationseigenschaften an den richtigen Stellen hinzu und verfolgte dann die Ausführungsschritte in Funktionen, bis der POST gesendet wurde, selbst wenn meine neuen Parameter in den Daten vollständig sind, bis sie gesendet werden eine uRL, die sie nicht

enthält

screeenshot of debug console showing data object state just before POST

Meine resultierende uRL weiter Parameter wie dieser entfernt

https://accounts.google.com/AccountChooser?continue=https://accounts.google.com/o/oauth2/auth? 
scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/cloudprint+https://www.googleapis.com/auth/userinfo.profile+openid 
&response_type=token+code+id_token+gsession 
&redirect_uri=http://localhost:8080/identity/control/authenticate 
&state=AFD_5tmV........... etc 
&client_id=143312559437-4o93ranlfalg78rj006qirib182bnkj4.apps.googleusercontent.com 
&include_profile=true 
&hl=en-GB 
&from_login=1 
&as=77237587f41849c5 
&ltmpl=popup 
&btmpl=authsub 
&hl=en_GB 
&scc=1 
&oauth=1 

Warum und wie wird access_type = offline aussieht?

Antwort

0
gitkit.widget.handler.onProviderSignInIdpClick_ = function(app, component, idp) { 
    //null values are removed later in requestGitkitEndpoint 
    //not sure if extra paramaters are needed in the Request 
    var request = { 
    providerId: idp.getProviderId(), 
    continueUri: app.getConfig().getIdpCallbackUrl(), 
    oauthScope: app.getConfig().getIdpConfigAdditionalScopes(), 
    access_type: app.getConfig().getAccessType(), 
    approval_prompt: app.getConfig().getApprovalPrompt() 
    }; 
    //the request is then parsed into the executor within component.executeRequest 
    component.executeRequest(
    //executor 
    goog.bind(app.getApi().createAuthUri, app.getApi()), 
    //request 
    request, 
    //cb 
    function(resp) { 
     if (!resp || gitkit.api.hasError(resp)) { 
     (gitkit.log.error("createAuthUri: " + goog.json.serialize(resp)), component.showInfoBar(gitkit.widget.handler.common.getErrorMessage(gitkit.api.getErrorCode(resp)))) 
     } else { 
     if(resp.providerId === 'google.com'){ 
      var append = null; 
      if (goog.isDefAndNotNull(app.getConfig().getAccessType())) { 
      var paramValue = goog.string.urlEncode(app.getConfig().getAccessType()); 
      append = "&access_type=" + paramValue; 
      } 
      if (goog.isDefAndNotNull(app.getConfig().getApprovalPrompt())) { 
      var paramValue = goog.string.urlEncode(app.getConfig().getApprovalPrompt()); 
      if(append) append = append.concat("&approval_prompt=" + paramValue); 
      else append = "&approval_prompt=" + paramValue 
      } 
      if(append){ 
      resp.authUri = resp.authUri.concat(append); 
      } 
     } 
     resp.sessionId && gitkit.storage.setSessionId(resp.sessionId, app.getAppId()), 
      gitkit.storage.setRememberAccount(!1, app.getAppId()), 
      gitkit.util.goTo(goog.asserts.assert(resp.authUri)); 
     } 
    }); 
};