我正在开发需要Mail.ReadWrite权限的Outlook加载项。
我已在我的租户**(租户A)**的Azure注册应用中添加了此权限。
我还将它们添加到manifest.xml
文件中
<Scopes>
<Scope>Mail.ReadWrite</Scope>
<Scope>offline_access</Scope>
<Scope>User.Read</Scope>
<Scope>profile</Scope>
<Scope>openid</Scope>
</Scopes>
下面是我如何调用登录提示符(使用Office.js库)
const token = await OfficeRuntime.auth.getAccessToken({
allowConsentPrompt: true,
allowSignInPrompt: true,
forMSGraphAccess: true,
});
那我就找第二个租客试试
当tanant B中的用户首次安装加载项并运行应用时。将出现一个弹出的同意
在这里,我没有看到应用程序请求的所有权限。
当我尝试获取图形API数据时,这会导致问题。我得到这个错误:
'AADSTS65001:用户或管理员未同意使用ID为“1bc 20309-c580- 40 ad-8133-c 0 c2bd 127807”、名为“summarizrApp”的应用程序。发送此用户和资源的交互式授权请求。\r\n跟踪ID:bb 0919 d 6 -3fbe-4a 62-b5 a3 - 7389b3da4100\r\n相关ID:76194227- 9 c13 -4292-9088-aac8a7d037f1\r\n时间戳:2023-06-09 16:34:38Z'
当我在测试租户BAzure门户上登录Entreprise applications
时,我看到应用程序已添加。
但我注意到,并不是所有权限都存在,只有profile
、openid
和offline_access
,而没有Mail.ReadWrite
或User.Read
然而这些权限不需要管理员授予。
只有当我点击授予管理员同意(在租户BAzure门户的企业应用程序中),然后添加缺少的权限,图形调用工作正常。
然后,
知情同意后:
缺少的权限在这里!
我所期望的行为是,在同意用户窗口中,用户获得所有权限。一旦他赠款它们,Outlook附加组件应该能够代表用户调用图形。
Authenticate a user with a single-sign-on token in an Outlook add-in
2条答案
按热度按时间fgw7neuy1#
租户的管理员需要提供一次同意,您可以在安装应用程序时这样做。否则,用户将被要求在第一次登录时使用.
nx7onnlm2#
我创建了一个Azure AD多租户应用程序,并添加了API权限,如下所示:
现在,我尝试使用以下端点授权用户:
TenantB
用户获得了同意界面*,包括如下所有权限:代码已生成:
在**
TenantB
****企业应用**中,所有权限都添加到用户同意书中,如下所示:现在,我使用以下参数生成了访问令牌:
当我解码令牌时,所有的范围都存在:
我可以通过上面生成的访问令牌成功调用Graph API,如下所示:
要解决错误,请尝试以下操作:
https://graph.microsoft.com/.default
**,以获得所有权限的同意。