【问题标题】:Re-authorization for an app to send gmail重新授权应用发送 gmail
【发布时间】:2021-06-03 23:10:42
【问题描述】:

在什么情况下(除了某人撤销更改其 gmail 密码的权限)用户需要重新授权应用程序访问其 gmail 数据?我的应用程序存储并使用刷新令牌来维护当前的访问令牌,但我的用户偶尔仍会被要求从头开始授权,有时这会失败,只有在他们重置浏览器设置后才能再次工作。

【问题讨论】:

    标签: oauth google-oauth gmail-api


    【解决方案1】:

    刷新令牌过期的原因。

    1. 用户撤销访问权限。
    2. 用户更改密码并使用 gmail 范围
    3. 六个月内未使用刷新令牌。
    4. 您最多可以为一个用户拥有 50 个未完成的刷新令牌。因此,如果用户请求新的刷新令牌,请确保存储最新的令牌,因为一旦您达到 51,最旧的可用令牌就会过期。

    除非您考虑到 2015 年秋季的错误,该错误导致一堆刷新令牌由于夏令时而过期,否则应该是这样。 (那是有趣的一天)

    【讨论】:

    • 嗨。好吧,这些都不适用,所以我很困惑。
    • 谁能解释为什么这种情况不断发生?使用我的应用程序通过 gmail api 发送电子邮件的每个人都需要随机间隔重新授权,尽管 Daimto 上面所述的条件均不适用。然后,当他们尝试重新授权时,他们得到一个错误(“出错了”)。然后,他们必须打开浏览器,清除设置,然后重新授权才能正常工作。我正在使用谷歌自己的授权代理对象,所以在我看来,这有效地排除了我的编码问题。
    • 我个人猜测它的 4 号你没有存储最新的刷新令牌。但这实际上取决于您使用的应用类型。
    【解决方案2】:
    I'm not storing anything explicitly, it's all being done by Google's Authorization Broker. Here's the code:
    
    UserCredential credential; 
    using (FileStream credentialsfile = new FileStream(Application.StartupPath + @"/credentials.json", FileMode.Open, FileAccess.Read))
    {
                    string credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                    credPath = Path.Combine(credPath, ".credentials/SJGmailAPI.json");
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(credentialsfile).Secrets, Scopes, senderemailaddress, CancellationToken.None, new FileDataStore(credPath, true)).Result;
                }
                bool rc = AuthTest.TestAuthorisation(credential,senderemailaddress,ApplicationName);
    
    So is Google's own code storing the wrong refresh token then?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-08
      • 2021-10-29
      • 2017-11-17
      • 2023-03-14
      • 2020-06-22
      • 2013-02-17
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多