在不请求用户许可的情况下获取访问令牌和刷新令牌

Getting access token and refresh token without asking for user permission

我想访问 Google 驱动器以使用 Google.Apis.Drive.v3 上传文件。 这是我的代码:

protected async void btnConnectGoogleDrive_Click(object sender, EventArgs e)
{
    string[] Scopes = { DriveService.Scope.Drive };
    UserCredential credential;
    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
            new ClientSecrets
            {
                ClientId = "",
                ClientSecret = ""
            },
            Scopes,
            "user",
            CancellationToken.None);

    InsertGoogleDriveToken(credential.Token.AccessToken, areaID, "accesstoken");
    InsertGoogleDriveToken(credential.Token.RefreshToken, areaID, "refreshtoken");

    // Create Drive API service.
    var service = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "SocialLadder",
    });

    GoogleDriveUpload(service, areaID);
}

在这里我可以获得 AccessToken 和 RefreshToken 但用户没有被重定向到权限页面,所以当我尝试上传图像到驱动器时​​它给我错误 "permission_not_granted"。在 MVC 中使用相同的东西,效果很好。

请帮我解决这个问题。

我怀疑你换了范围。您需要对用户进行身份验证。执行以下操作之一

  • 转到 %appdata% 并删除该用户的 creditlas 文件。
  • 将 "user" 更改为其他内容 "user1"

然后您的应用程序应要求用户再次进行身份验证。