【问题标题】:How to accesses Gmail with a web app using OAuth and .Net如何使用 OAuth 和 .Net 通过网络应用访问 Gmail
【发布时间】:2016-09-06 16:53:00
【问题描述】:

我正在尝试使用 ASO .Net 和 C# 编写一个简单的 Web 应用程序,它向用户显示一个带有单个按钮的简单网页。通过单击按钮,用户使用 OAuth2 验证他的 Gmail 帐户,然后页面列出他的未读电子邮件。对于身份验证部分,我使用以下代码:

OAuth2Parameters parameters = new OAuth2Parameters() 
{
   ClientId = "MY CLIENT ID AS RECEIVED FROM GOOGLE",
   ClientSecret = "MT CLIENT CECRET AS RECEIVED FROM GOOGLE",
   RedirectUri = "http://localhost:16615/GoogleOAuthCallback.aspx",
   Scope = "https://www.googleapis.com/auth/gmail.readonly",
   State = "email1",                
   AccessType = "offline"
};

parameters.AccessCode = Request.QueryString["code"];
Google.GData.Client.OAuthUtil.GetAccessToken(parameters);
GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory(null, " Web client 1", parameters);
Google.Apis.Auth.OAuth2.Responses.TokenResponse token = new Google.Apis.Auth.OAuth2.Responses.TokenRespons
{
     RefreshToken = "??????????????????",
};

UserCredential credential = new UserCredential(new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
       ClientSecrets = new ClientSecrets
       {
          ClientId = "MY CLIENT ID FROM GOOGLE",
          ClientSecret = "MY SECRET FROM GOOGLE",
       },
 }), "user", token);


// Create Gmail API service.
GmailService service = new GmailService(new BaseClientService.Initializer()
{
       HttpClientInitializer = credential,
       ApplicationName = “Web client 1”,
});

我不知道如何获取刷新令牌,以及这是否是为我的应用编写代码的正确方法。任何帮助将不胜感激!

【问题讨论】:

    标签: .net web-applications oauth-2.0 gmail-api


    【解决方案1】:

    如果您查看API Client Library for .NET 下的OAuth 2.0 文档,您会看到:

    用户凭据

    UserCredential 是一个线程安全的帮助类,用于使用访问令牌访问受保护的资源。访问令牌通常会在 1 小时后过期,之后如果您尝试使用它会收到错误消息。

    UserCredentialAuthorizationCodeFlow 负责自动“刷新”令牌,这意味着获取新的访问令牌。这是使用长期刷新令牌完成的,如果您在授权代码流期间使用access_type=offline 参数,您将收到该令牌以及访问令牌。

    在大多数应用程序中,建议将凭证的访问令牌和刷新令牌存储在持久存储中。否则,您需要每小时在浏览器中向最终用户显示一个授权页面,因为访问令牌会在您收到一个小时后过期。

    为确保访问和刷新令牌持续存在,您可以提供自己的 IDataStore 实现,也可以使用库提供的以下实现之一:

    • .NET 的 FileDataStore 可确保凭据在文件中持久存在。
    • 适用于 Windows 和 Widows Phone 的 StorageDataStore 可确保使用 Windows StorageFolder 保持凭据。

    为了进一步了解这里的流程,请使用Google's repository 检查 OAuth 处理的代码。我希望这有帮助。 :)

    【讨论】:

    • 感谢 Rebot 先生的回复 :) 您能否指导我查看 .Net 中实现此类过程的代码示例?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多