gpt4 book ai didi

c# - Oauth token 访问

转载 作者:行者123 更新时间:2023-11-30 16:38:27 30 4
gpt4 key购买 nike

我想获取访问 token 以使用它使用 Microsoft Graph API 从 Outlook 中获取电子邮件。我的应用程序将是基于控制台的 c# 应用程序,它将在每 20 分钟后自动运行并获取电子邮件。

我是 c# 和 microsoft graph 的新手,这是我与这些技术相关的第一个任务。

问题是:

当我尝试使用 client_Credentials 获取 token 时,我成功地做到了,但现在该 token 已过期,我想获取新 token ,如果我尝试生成新 token ,它只会返回过期的 token 。

相关代码:

result = await context.AcquireTokenAsync(resourceUri, clientCredential);

使用 AcquireTokenSilentAsync 方法返回错误:“无法静默获取 token ,因为在缓存中找不到 token 。调用方法 AcquireToken。”

相关代码:

result = await authContext.AcquireTokenSilentAsync(resourceUri, clientId);

我的问题:

  1. 使用客户端凭证访问 token 是否是满足我需求的正确方法?

  2. 我读到过使用 client_Credentials 我们不需要 refresh_token,每次我们尝试连接时都会获得新 token 。

  3. 如何在每次连接时获取新 token ?

  4. 任何关于如何实现我的主要目标的额外建议都将受到热烈欢迎。

我附上我的代码示例:

static async Task getAccessToken()
{
authContext = new AuthenticationContext("https://login.microsoftonline.com/<tenantId>");
try
{
result = await authContext.AcquireTokenSilentAsync(resourceUri, clientId);
}
catch (Exception ex)
{
Console.WriteLine(ex);
try
{

result = await authContext.AcquireTokenAsync(resourceUri, clientCredential);

Console.WriteLine("" + result.AccessToken+"\n\n");
}
catch (Exception e)
{
Console.WriteLine("\n AcquireTokenAsync failed\n");
Console.WriteLine(""+e);
}
}
if (result == null)
{
Console.WriteLine("Canceling attempt to get access token.\n");
return;
}
Console.WriteLine(result.AccessToken);

}

最佳答案

您混合了两种不同的 OAuth 流程(授权代码和客户端凭据)。您应该只需要使用正确的凭据调用 AcquireTokenAsync。每当您需要一个新 token (每个 token 大约存在一个小时)时,您重新执行此方法以获取一个新 token :

static async Task<AuthenticationResult> getAccessToken()
{
ClientCredential clientCredential = new ClientCredential("YOUR_APP_ID", "YOUR_APP_SECRET");
AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/YOUR_TENANT_ID");
AuthenticationResult result = null;

try
{
result = await authContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}

if (result == null)
Console.WriteLine("Canceling attempt to get access token.");
else
Console.WriteLine(result.AccessToken);

return result;
}

关于c# - Oauth token 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54940596/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com