'scope' 的值在获取 OAuth 令牌以读取 Outlook 电子邮件时使用
Value of 'scope' to use when getting OAuth token to read Outlook email
我有一个现有的应用程序(作为 WebJob 运行的控制台应用程序)使用 Exchange Web 服务读取共享 Outlook 365 邮箱中的电子邮件。这行得通,但它使用的是基本身份验证,我想改用 OAuth。我正在尝试使用 Microsoft.Identity.Client.ConfidentialClientApplicationBuilder 来获取访问令牌。我在网上阅读了各种文章和帖子,它们似乎就调用 AcquireTokenForClient 时 'scope' 参数应该是什么给出了相互矛盾的建议。有人说 https://graph.microsoft.com/.default, others say https://outlook.office.com/.default or https://outlook.office365.com/.default。其他人似乎建议它应该是 Mail.Read 而不是 .Default。我试过以上所有方法都没有成功。谁能告诉我 'scope' 的正确值是多少?
我假设你已经为 Office 365 租户注册了你的应用程序。我们成功使用 EWS 与现代身份验证已有一段时间了。要使用 OAuth 身份验证访问租户中的用户邮箱,您必须授予已注册应用程序 API 权限 Exchange - full_access_as_app 并使用 https://outlook.office.com/.default 作为范围。
var clientApp = ConfidentialClientApplicationBuilder
.Create("applicationId")
.WithTenantId("tenantId")
.WithClientSecret("secret")
.Build();
var authenticationResult = await clientApp.AcquireTokenForClient(new[] { "https://outlook.office.com/.default" }).ExecuteAsync();
var accessToken = authenticationResult.AccessToken;
然后将令牌添加到 EWS 请求的授权 header。
我有一个现有的应用程序(作为 WebJob 运行的控制台应用程序)使用 Exchange Web 服务读取共享 Outlook 365 邮箱中的电子邮件。这行得通,但它使用的是基本身份验证,我想改用 OAuth。我正在尝试使用 Microsoft.Identity.Client.ConfidentialClientApplicationBuilder 来获取访问令牌。我在网上阅读了各种文章和帖子,它们似乎就调用 AcquireTokenForClient 时 'scope' 参数应该是什么给出了相互矛盾的建议。有人说 https://graph.microsoft.com/.default, others say https://outlook.office.com/.default or https://outlook.office365.com/.default。其他人似乎建议它应该是 Mail.Read 而不是 .Default。我试过以上所有方法都没有成功。谁能告诉我 'scope' 的正确值是多少?
我假设你已经为 Office 365 租户注册了你的应用程序。我们成功使用 EWS 与现代身份验证已有一段时间了。要使用 OAuth 身份验证访问租户中的用户邮箱,您必须授予已注册应用程序 API 权限 Exchange - full_access_as_app 并使用 https://outlook.office.com/.default 作为范围。
var clientApp = ConfidentialClientApplicationBuilder
.Create("applicationId")
.WithTenantId("tenantId")
.WithClientSecret("secret")
.Build();
var authenticationResult = await clientApp.AcquireTokenForClient(new[] { "https://outlook.office.com/.default" }).ExecuteAsync();
var accessToken = authenticationResult.AccessToken;
然后将令牌添加到 EWS 请求的授权 header。