相关疑难解决方法(0)

google oauth2:为Web服务器应用程序上的授权用户重新获取refresh_token

我在网络服务器上使用oauth2,流程完美无缺(https://developers.google.com/accounts/docs/OAuth2WebServer).

但是,我有一些情况需要重新获取refresh_token(比方说,例如,refresh_token已经"丢失").

在这种情况下,当我再次进入第1阶段和第2阶段时,我只获得access_token而不是refresh_token.如果用户通过他的Google帐户控制台撤消权限并再次进入第1阶段和第2阶段,我将获得一个新的refresh_token.

这是已知的oauth2行为吗?有没有办法强制一个新的refresh_token或再次获得相同的刷新?

google-contacts-api oauth-2.0

3
推荐指数
1
解决办法
3052
查看次数

即使access_type = offline,OAuth2.0也无法获取刷新令牌

我在文档中看到您需要设置access_type=offline才能获得刷新令牌.

我确实在OAuth url中设置了这个值,我清楚地看到它与其他参数一起正确设置.但是,我仍然没有将刷新令牌作为响应返回.我从本文档中复制并粘贴了OAuth2相关代码.

python oauth-2.0 google-oauth

3
推荐指数
1
解决办法
2588
查看次数

通过 oauth2 从 Google Analytics Data API (Ga4) 提取数据(同意屏幕)

是否可以不通过服务帐户从Google Analytics Data API(GA4 帐户)提取数据?我可以使用服务帐户正常提取(下面的示例),但我需要通过 oauth(同意屏幕)进行授权,并且我发现绝对没有任何相关内容。

<?php
require 'vendor/autoload.php';

use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;

$client = new BetaAnalyticsDataClient(['credentials' => 'MY-CREDENTIALS.json']);

$response = $client->runReport([
    'property' => 'properties/MY-ID',
    'dateRanges' => [
        new DateRange([
            'start_date' => '2020-03-31',
            'end_date' => 'today',
        ]),
    ],
    'dimensions' => [new Dimension(
        [
            'name' => 'city',
        ]
    ),
    ],
    'metrics' => [new Metric(
        [
            'name' => 'activeUsers',
        ]
    )
    ]
]);

print 'Report result: ' . PHP_EOL;

foreach ($response->getRows() as $row) {
    print $row->getDimensionValues()[0]->getValue()
        . …
Run Code Online (Sandbox Code Playgroud)

php google-analytics-api google-cloud-php-client

2
推荐指数
1
解决办法
3126
查看次数

Google Oauth2刷新令牌为空

我用字符串进行代码请求:

https://accounts.google.com/o/oauth2/v2/auth?
   scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&
   state={%22externalUserId%22:%22TEST%22}&
   access_type=offline&
   include_granted_scopes=true&
   redirect_uri=http://localhost:3344/oauth2/google/callbackcode&response_type=code&
   client_id=676016849609-r53vpjccpr9kf5uvuul7h6kvek1id2oh.apps.googleusercontent.com
Run Code Online (Sandbox Code Playgroud)

我收到 oauth2 代码。我使用java客户端做令牌请求代码。

private AuthorizationCodeFlow flow;
@PostConstruct
public void init() {
    NetHttpTransport transport = null;
    try {
        transport = GoogleNetHttpTransport.newTrustedTransport();
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        flow = new GoogleAuthorizationCodeFlow.Builder(
                transport, JSON_FACTORY, GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(GoogleCalendarClient.class.getResourceAsStream("/client_secret_676016849609-r53vpjccpr9kf5uvuul7h6kvek1id2oh.apps.googleusercontent.com.json")))
                , SCOPES).build();
    } catch (IOException e) {
        e.printStackTrace();
    }
    callBackPattern = String.format(callBackPattern, provider().lowerCaseName());
}
Run Code Online (Sandbox Code Playgroud)
flow.newTokenRequest(oauthCode)
                .setRedirectUri(callBackPattern)
                .execute();
Run Code Online (Sandbox Code Playgroud)

结果我收到TokenResponse

{
  "access_token": "ya29.Glv_A8Fidn8cRmQveIy0pbDIjcxssKN61X20u4zjlDYV1NbiC-QO593_isRa8Q5ngSFr-y-zICjXw1WZy4OguOh90SCyPnz0NGYpw7I4fahzH7NORQm-bbnA9Chr",
  "expires_in": 3592,
  "id_token": "eyJhbGciOOiZUzI1NiIsImtpZCI6IjgxMDkxNGZiOTk0OGYxZTQzNTdjYzg3MjY4MDg3Mjk4ZTgzNTlkMjAifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWF0IjoxNDg4MTg0NDcxLCJleHAiOjE0ODgxODgwNzEsImF0X2hhc2giOiJaVjgxejQwV0pYX3N1WkplazZnem93IiwiYXVkIjoiNjc2MDE2ODQ5NjA5LXI1M3ZwamNjcHI5a2Y1dXZ1dWw3aDZrdmVrMWlkMm9oLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwic3ViIjoiMTE4MTk1OTk4MjU4MDIyMzM2MDUwIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF6cCI6IjY3NjAxNjg0OTYwOS1yNTN2cGpjY3ByOWtmNXV2dXVsN2g2a3ZlazFpZDJvaC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImVtYWlsIjoic2VyZ2lpX3ZsYXNpdWtAdWtyLm5ldCJ9.DWkcTAwOPnirsDL_ok10GHjoe0Rg0n-uYYtSfn3tXkIg-xB6taaYi2-gdNCh64-hSzgQWsdeLu7Mga1rXfGVTw-iBPWhU80MhoiH_YZtLpAK7f94rBajqHa8ucei1P7RSZxRD-RdB1YMjpJPQhKx5DV0W9xBPB3LN8s1C3vL-06Y4nu7yB2ZFllG6SIJbl7f0Kn2S_SCAxhxGvwSuIqW4ogXwqc0njdBwWlOvdxn8hQ33dftljn-Q5fJ0iEroLEhUhnGwmGAcr7yl-HRjZQvz6ICyQLvRGDv6J12pEdDu2S0mGZfV_zNLG2-EKqo6xm99WsFSMsV_6_TeCG478f7bQ",
  "token_type": "Bearer" …
Run Code Online (Sandbox Code Playgroud)

java oauth-2.0 google-oauth

0
推荐指数
1
解决办法
2613
查看次数