Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Gmail API:强制授权重新提示用户_C#_Gmail Api - Fatal编程技术网

C# Gmail API:强制授权重新提示用户

C# Gmail API:强制授权重新提示用户,c#,gmail-api,C#,Gmail Api,授权访问gmailAPI的凭据似乎以某种方式被缓存。当我更改客户ID和密码以及电子邮件地址时,没有任何更改。另外,当我更改范围时,没有任何更改。我正在尝试强制刷新凭据。有没有办法强制凭据重新提示用户 是否有我可以找到并删除的文件 我使用的是nuget的c#和gmail api包。认证代码为: _emailAddress = Settings.EmailAddress; string clientSecret = Settings.ClientSecret; string clientId =

授权访问gmailAPI的凭据似乎以某种方式被缓存。当我更改客户ID和密码以及电子邮件地址时,没有任何更改。另外,当我更改范围时,没有任何更改。我正在尝试强制刷新凭据。有没有办法强制凭据重新提示用户

是否有我可以找到并删除的文件

我使用的是nuget的c#和gmail api包。认证代码为:

 _emailAddress = Settings.EmailAddress;
string clientSecret = Settings.ClientSecret;
string clientId = Settings.ClientId;
ClientSecrets clientSecrets = new ClientSecrets {ClientId = clientId, ClientSecret = clientSecret};
UserCredential credential;
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    clientSecrets,
    Scopes,
    "user",
    CancellationToken.None).Result;

_service = new GmailService(new BaseClientService.Initializer()
{
   HttpClientInitializer = credential,
   ApplicationName = "Draft Sender", //applicationName,
});
此外,一旦我创建了凭据,我的作用域就设置好了:在我删除并续订secret和clientID之前,无法更改作用域。另外,生成凭证需要两次运行,第一次导致错误,第二次导致提示授权

我很确定这是因为凭据被缓存在某个地方,尽管我没有指定任何存储…但我不确定。不管怎样,问题似乎取决于gmail api包中的代码,但我很难找到解决方案

最终,我需要将一项功能部署到ASP网站,该网站将访问gmail帐户作为电子邮件存储库,因此我需要解决此授权问题,以便服务器在部署时(或部署后)能够访问电子邮件帐户。实际上,没有必要(但希望)在没有中间错误的情况下发生


是否有解决方案(简单或困难)来控制此缓存过程并处理权限

如果未指定响应令牌的存储位置,则它存储在:

C:\Users\Your user'\AppData\Roaming\Google.api.Auth

如果要指定目录,请查看以下内容: (注意:您只需在项目中创建目录
App\u Data


你能详细说明一下吗?你用的是什么图书馆和语言?我假设您的库仍然认为您拥有的令牌是有效的,因此它不需要重新验证。我认为这正是正在发生的事情。我继续删除了我的秘密和clientID,并创建了一个新的。这迫使系统重新验证。但必须有一个更干净的方法来做到这一点??我正在使用C#和nuget gmail api包。我认为您应该只进行一次身份验证,并使用库中的其他整洁函数在访问令牌用完时(通常在一小时后)刷新它:)哦,我知道这会很容易:)我会试试看是否有效——但我不能一直授权电子邮件…它应该只授权一次。。。让它在服务器上运行存在一个问题:是否可以在凭据完整的情况下进行部署?否则,我觉得我需要以某种方式控制令牌。。
string path = HostingEnvironment.MapPath("~/App_Data");    
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                         new ClientSecrets
                         {
                             ClientId = "Client_ID",
                             ClientSecret = "Secret_Client"
                         },
                         Scopes,
                         "me",
                         CancellationToken.None,
                         new FileDataStore(path)

                         ).Result;