Google oauth .net 我怎样才能获得有效的凭据?

Google oauth .net how can I get valid credential?

我尝试从 Google OAuth documentation 创建一个示例,但我无法获得有效的凭据。 在 OAuth 回调控制器中,我重写了 IndexAsync 方法。但是事件我有一个授权码。我的取消令牌每次都是假的。结果我没有 result.Credential

public override async Task<ActionResult> IndexAsync(AuthorizationCodeResponseUrl authorizationCode, CancellationToken taskCancellationToken)
    {
        var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).
            AuthorizeAsync(taskCancellationToken);

     --> **result.Credential == null**

        var service = new GmailService(new BaseClientService.Initializer
        {
            HttpClientInitializer = result.Credential,
            ApplicationName = "ASP.NET MVC Sample"
        });
        UsersResource.LabelsResource.ListRequest request = service.Users.Labels.List("me");

        IList<Label> labels = request.Execute().Labels;

        var a = request;
        return View();
    }

我做错了什么?

如您所说,您正在使用 OAuth 2.0。有一个使用 OAuth 2.0 访问 Google API 的基本模式。它遵循 4 个步骤:

  • 从 Google 开发人员控制台获取 OAuth 2.0 凭据。
  • 从 Google 授权服务器获取访问令牌。
  • 将访问令牌发送到 API。
  • 如有必要,刷新访问令牌。

更多详细信息,您可以按照此处的教程进行操作:https://developers.google.com/identity/protocols/OAuth2InstalledApp#handlingtheresponse

您必须访问 Google 开发人员控制台以获取 OAuth 2.0 凭据,例如 Google 和您的应用程序

都知道的客户端 ID 和客户端密码

除了@Tholle 的回答外,请阅读Official Google Document。只需完成页面其余部分中描述的步骤,大约五分钟后,您将拥有一个向 Gmail API.

发出请求的简单 .NET 控制台应用程序

因此,如果没有更多信息,很难判断这里出了什么问题,但我遇到了同样的问题,这就是导致我出现问题的原因。

AppFlowMetadata 创建了一个新的 GoogleAuthorizationCodeFlow 实例。这需要一个 Initializer 对象,并在该对象中定义用于存储令牌的 DataStore。

如果您没有定义该 DataStore,或者如果该 Datastore 中的某些内容无法正常工作以致于无法存储令牌,则会导致这种行为,即每次凭据 returns null .

所以我会开始检查您的 DataStore 是否配置正确。