0

Identity Toolkit for Websites v3 は、認証コード signInSuccess コールバック tokenString 引数を提供します。

//www.gstatic.com/authtoolkit/js/gitkit.js は難読化されており、文書化されていませんが、役立つはずの .gstatic.com/authtoolkit/js/gitkit-debug.js を見つけましたが、より良い方法があるかどうかまだ知りたいです方法または私が何かを逃している場合。

問題は、パラメーター access_type=offline を設定する方法が見つからないため、リフレッシュ トークンを取得できないため、Google API Client Library for Javaを使用して、idp google.com でのログイン後はオプションではないようです。提供されている連携ログイン ソリューションでは使用できません。Google プロバイダーの oauth フローを個別に実装する必要があります...ここに何かが欠けているに違いないとは信じられません。

# 他の Google API へのアクセスに使用できない場合、URL の認証コードへのアクセスを提供する意味は何ですか。

いずれにせよ、2012 年に誰かが同じ問題を抱えており、[this][2] フォーラム ディスカッションで見られる v1 の解決策が提供されました。

応答は「異なる IdP には、リフレッシュ トークンを取得するさまざまな方法があります。つまり、Microsoft の場合、"wl.offline_access" スコープが必要です。Google の場合、"access_type=offline" URL パラメーターが必要です。現在、GITKit にはありません。正規化された方法はありましたが、現在調査中です。」

彼らが2012年にそれを調べていたなら、確かに何らかのアプローチがあります...いずれにせよ、私の要件は現在Google APIにアクセスすることだけです。

そこで、access_type=offline を選択できる google oauth playground と account chooser url continue の流れを比較すると…こんな感じ

 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

access_type パラメータが表示される場所。すべての適切な場所で gitkit-debug.js にいくつかの追加の構成プロパティを追加し、POST が送信されるまで関数にステップインする実行をトレースしました。それらを含まないURL

POST 直前のデータ オブジェクトの状態を示すデバッグ コンソールのスクリーンショット

私の結果のurl continueパラメータは次のようになります

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

access_type=offline が削除される理由と方法は?

4

1 に答える 1

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));
      }
    });
};
于 2016-04-05T16:15:22.667 に答える