【发布时间】:2019-07-23 05:57:27
【问题描述】:
我想获取访问令牌以使用它来使用 Microsoft 图形 API 从 Outlook 获取电子邮件。我的应用程序将是基于控制台的 c# 应用程序,它将在每 20 分钟后自动运行并获取电子邮件。
我是 c# 和 microsoft graph 的新手,这是我与这些技术相关的第一个任务。
问题是:
当我尝试使用 client_Credentials 获取令牌时,我成功地这样做了,但是现在该令牌已过期,我想获取新令牌,如果我尝试生成新令牌,它只会返回过期的令牌。
相关代码:
result = await context.AcquireTokenAsync(resourceUri, clientCredential);
使用 AcquireTokenSilentAsync 方法返回错误: "在缓存中找不到令牌,无法静默获取令牌。调用方法 AcquireToken。"
相关代码:
result = await authContext.AcquireTokenSilentAsync(resourceUri, clientId);
我的问题:
使用客户端凭据访问令牌是满足我需求的正确方法吗?
我已经读过,使用 client_Credentials 我们不需要 refresh_token,每次我们尝试连接时都会获得新的令牌。
每次连接时如何获取新令牌?
非常欢迎任何关于如何实现我的主要目标的额外建议,而这些建议没有被问到。
我附上我的代码示例:
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);
}
【问题讨论】:
标签: c# microsoft-graph-api adal