Google oauth .net如何获得有效凭证?

时间:2016-07-26 15:11:25

标签: .net oauth gmail-api google-api-dotnet-client

我尝试从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();
    }

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

AppFlowMetadata创建了GoogleAuthorizationCodeFlow的新实例。这将获取一个Initializer对象,并在该对象中定义DataStore以存储标记。

如果您没有定义DataStore,或者某些内容在该数据存储区内无法正常工作以使令牌未被存储,则会导致此行为,即凭据每次都返回null

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

答案 1 :(得分:-1)

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

  • 从Google Developers Console获取OAuth 2.0凭据。
  • 从Google授权服务器获取访问令牌。
  • 将访问令牌发送到API。
  • 如有必要,请刷新访问令牌。

有关详细信息,请按照此处的教程进行操作:https://developers.google.com/identity/protocols/OAuth2InstalledApp#handlingtheresponse

您必须访问Google Developers Console才能获取OAuth 2.0凭据,例如Google和您的应用程序都知道的客户端ID和客户端密码

除@Tholle回答外,请浏览Official Google Document。只需完成页面其余部分中描述的步骤,大约五分钟后您就会有一个简单的.NET控制台应用程序向Gmail API发出请求。