Oauth 获取空刷新令牌

Oauth 获取空刷新令牌,oauth,google-api,google-api-java-client,Oauth,Google Api,Google Api Java Client,我正在使用GoogleAPI java客户端版本1.8-beta对google帐户进行oAuth2身份验证。在得到GoogleTokenResponse对象之前,一切都很好,该对象具有访问令牌,但没有刷新令牌。 要生成请求url,请使用以下方法: ... googleAuthenticationUrl = new GoogleAuthorizationCodeRequestUrl(CLIENT_ID, callBackUrl, scopes).build(); ... 获取请求令牌时,

我正在使用GoogleAPI java客户端版本1.8-beta对google帐户进行oAuth2身份验证。在得到GoogleTokenResponse对象之前,一切都很好,该对象具有访问令牌,但没有刷新令牌。 要生成请求url,请使用以下方法:

...
    googleAuthenticationUrl = new GoogleAuthorizationCodeRequestUrl(CLIENT_ID, callBackUrl, scopes).build();
...
获取请求令牌时,我将其与此行中的访问令牌交换:

...
GoogleTokenResponse tokenResponse =  new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(), CLIENT_ID, CLIENT_SECRET, request.getParameter(CODE_URL_PARAM), callBackUrl).execute();
...
返回的GoogleTokenResponse对象不包含刷新令牌:

{"access_token":"ya29.AH..etc...9-Y","expires_in":3600,"token_type":"Bearer"}

你能告诉我这个问题吗?非常感谢你的帮助

构建请求Url时,应设置访问类型:

requestUrl = new GoogleAuthorizationCodeRequestUrl(googleClientId, callBackUrl, scopes)
    .setApprovalPrompt("force") // needed if user already granted permission
    .setAccessType("offline")
    .build();
如本设置中所述,建议使用此参数:

[…]我们建议您显式设置access_type参数 离线,因为我们预计当在线价值 引入后,它将作为默认行为。这可能导致 应用程序中的意外更改,因为它会影响 允许您的应用程序刷新访问令牌。通过 显式地将参数值设置为脱机,可以避免 应用程序功能的更改。[……]


除了PapelPincel的回答外,我还必须使用.Net强制执行批准提示 发布1.8.1.970以获取刷新令牌。乙二醇

var authReq=new GoogleAuthorizationCodeRequestUrl(新Uri(GoogleAuthConsts.AuthorizationUrl)){
重定向URI=回调,
ClientId=ClientId,
AccessType=“离线”,
Scope=string.Join(“,new[]{Scopes…}),
ApprovalPrompt=“强制”
}; 

对于任何通过谷歌搜索来这里的人来说,我没有使用纯服务器端流程,所以是通过javascript获取授权令牌的,@PapelPincel-answer对我来说是一个提示

您应该向按钮中添加数据访问类型=“脱机”,如以下代码段所示:

例如:

          <span
            data-accesstype="offline"
            class="g-signin"
            data-callback="signinCallback"
            data-clientid="CLIENT_ID"
            data-redirecturi="postmessage"
            data-cookiepolicy="single_host_origin"
            data-requestvisibleactions="http://schemas.google.com/AddActivity"
            data-scope="https://www.googleapis.com/auth/plus.login">
          </span>

在GoogleAuthorizationCodeFlow.Builder中:升级警告:在版本1.10之前,默认值为{@code“offline”}。但是,从版本1.10开始,它是{@code null},这意味着web应用程序的{@code“online”}。为了保持先前的行为,您需要显式调用{@code setAccessType(“offline”)}。如果您(PapelPincel)编写的内容(取自googledeveloper页面)是正确的,我认为这不足以“在令牌过期之前自动刷新令牌”(如图所示)。那么,如何在后台刷新访问令牌,而不要求用户在其他时间进行新授权呢?