【发布时间】:2022-01-15 09:27:06
【问题描述】:
我创建了一个 Outlook 插件并使用清单文件将其加载。我已经通过 Azure 中的配置为文档https://docs.microsoft.com/en-us/office/dev/add-ins/develop/register-sso-add-in-aad-v2 中概述的应用程序提供权限。我已在 API 权限中授予 Mail.Read 权限。首次在 Outlook 中使用加载项时,Windows 会弹出一个窗口,要求用户授予应用程序读取其用户配置文件的权限。我如何要求用户也授予访问权限以根据 Graph Explorer 阅读他们的邮件?我正在使用 Angular 13 和 .net 核心。
const params: Office.AuthOptions = {
allowSignInPrompt: true,
//forMSGraphAccess: true, // removed for testing in dev environment
allowConsentPrompt: true,
};
OfficeRuntime.auth.getAccessToken(params).then((token) => { xxxxx}
在清单文件中;
<WebApplicationInfo>
<Id>My App Id</Id>
<Resource>api://localhost:3000/My App Id</Resource>
<Scopes>
<Scope>Mail.Read</Scope>
<Scope>Mail.Read.Shared</Scope>
</Scopes>
</WebApplicationInfo>
<Permissions>ReadWriteMailbox</Permissions>
我的 .net 代码如下所示;
var userAssertion = new UserAssertion(token, "urn:ietf:params:oauth:grant-type:jwt-bearer");
string[] graphScopes = { "Mail.Read", "Mail.Read.Shared" };
result = await client.AcquireTokenOnBehalfOf(graphScopes, userAssertion).ExecuteAsync();
我在 Angular 中成功生成了一个令牌并将其发送到我的后端 API,但是当我尝试访问一个邮箱时,我得到了;
AADSTS70000:请求被拒绝,因为请求的一个或多个范围未经授权或已过期。用户必须先登录并授予客户端应用程序访问所请求范围的权限。
查看 Graph Explorer,我必须授予阅读邮件的权限,如果我随后导航管理应用程序和服务,我可以看到 Graph Explorer 可以访问“阅读您的电子邮件”,而我的 Outlook 应用程序只有“查看您的基本资料”。
救命!
干杯
乔治
【问题讨论】:
-
AADSTS70000- 错误可能是由于:1. 令牌绑定标头为空 2. 令牌绑定哈希不匹配参考:AADSTS error codes -
我认为这个问题可能与使用 Microsoft 帐户而不是域帐户有关。我尝试使用图形资源管理器进行测试,您必须授予您希望图形 API 访问的内容的权限 - 在我的情况下为 Mail.Read。如果我然后去查看我的 Microsoft 帐户,并检查哪些应用程序有权访问我的电子邮件、个人资料等,我可以看到 Graph API 具有我接受的访问权限。我认为由于我已将权限委派为管理员,因此用户不必手动授予权限。我已经让它工作了,但它并不理想。
标签: .net azure outlook microsoft-graph-api office365