我正在尝试使用 Microsoft 的 Graph API 来访问我正在使用 C# 和 .NET 构建的应用程序上的日历信息。据我了解,您必须在将身份验证设置为“通用”时将
TenantId
设置为“通用”,因为这将允许 Microsoft 电子邮件或个人电子邮件使用应用程序注册。
它在我用于开发的个人电子邮件上按预期工作,但随后它停止允许个人电子邮件:
我不确定这是否是因为我对代码所做的更改或后端的某些内容发生了更改,但我似乎无法解决此问题。
相关代码如下:
private const string TENANT_ID = "common";
private const string CLIENT_ID = "<CLIENT_ID>";
private static readonly FileInfo s_authPath = new FileInfo("./csOutlookStorage");
private static readonly string s_tokenCacheName = "OwsAuthToken";
private GraphServiceClient _client;
public bool AccountLinked => s_authPath.Exists;
public async Task InitializeAsync(CancellationToken token = default)
{
var credentialOptions = new InteractiveBrowserCredentialOptions()
{
TenantId = TENANT_ID,
ClientId = CLIENT_ID,
TokenCachePersistenceOptions = new TokenCachePersistenceOptions() { Name = s_tokenCacheName },
RedirectUri = new Uri("http://localhost:3006")
};
InteractiveBrowserCredential credential;
if(!AccountLinked)
{
credential = new InteractiveBrowserCredential(credentialOptions);
var authRecord = await credential.AuthenticateAsync(token);
using (var authRecordStream = s_authPath.Open(FileMode.Create))
{
await authRecord.SerializeAsync(authRecordStream);
}
}
...
对于此事,我将不胜感激。非常感谢
首先,使用“支持的帐户类型”注册一个多租户 Entra ID 应用程序,如下所示:
要访问日历信息,请确保在应用程序中分配“委托”类型的权限,如下所示:
“移动和桌面应用程序”平台中添加
Calendars.Read
作为重定向URI,并启用公共客户端,如下所示:
要使用个人帐户登录,通过 Graph API 访问日历信息,您可以使用以下示例代码:
http://localhost/
当您运行代码时,它将打开浏览器并要求您选择一个帐户,如下所示:
您也可以在此处选择个人帐户进行登录,这将在下一步中向您提供同意提示,如下所示:
当您现在返回应用程序时,您可以在输出控制台中找到日历 API 响应,如下所示:
参考资料:选择 Microsoft Graph 身份验证提供程序 - Microsoft Graph获取日历 - Microsoft Graph v1.0