守护程序应用程序获取不带角色的仅应用程序访问令牌

时间:2019-05-06 23:58:48

标签: microsoft-graph

我有一个JavaScript应用程序,需要用户登录并单击按钮,然后运行报告,将数据发布到Excel,然后发送电子邮件。我想自动执行此操作,因此用户不必登录并按下按钮。

我从以下项目代码开始:https://github.com/microsoftgraph/nodejs-apponlytoken-rest-sample

我按照说明进行操作,并且能够获取访问令牌,但随后我的api调用失败,未授权401。作为测试,我试图以自己的身份发送电子邮件,并且我拥有公司管理员授予的应用程序类型Mail.Send许可。

我花了很多时间阅读文档和博客,但没有找到解决方案。本文档总结了我要进行故障排除的最佳方法:https://blogs.technet.microsoft.com/sharepointdevelopersupport/2018/03/15/troubleshooting-assistance-with-microsoft-graph-api-development/

我得到的令牌没有任何角色,就像我用JWT对其进行解码时看到的那样。这是我到目前为止发现的唯一差异。

任何建议将不胜感激。如何确保我的令牌已定义角色,或者我还能尝试什么?我怎样才能成功获得令牌但不能将其用于任何事情?

谢谢!

2 个答案:

答案 0 :(得分:0)

我不是Node专家,因此可以通过一些可能帮助您的指针来帮助您。

Microsoft Graph具有两种类型的权限,Delegated and Application。因此,需要了解和检查一些事情。

  1. 已委派的权限要求用户存在,它们会显示在访问令牌的 scp 声明中。这些是通过网络应用程序使用implicit_grant流,Authorization code granton-behalf-of flow(通常)获得的。

  2. 应用程序许可,需要管理员的同意,并且将在access token中的 roles 声明中提供给您。这要求应用程序通过client credentials许可获得访问令牌。请注意,如this sample中所述,当为用户分配角色时,这些内容也会出现,但是这种情况可能不适用于您的情况。

您的应用程序是否按预期提供了赠款?您可以使用以下两个其余调用,通过Graph Explorer进行检查。将有一个OAuth2PermissionGrant条目,其中包含预期的角色。

  

https://graph.microsoft.com/beta/OAuth2PermissionGrants   https://graph.microsoft.com/beta/kalyankrishna.net/OAuth2PermissionGrants

如果您可以解释用于获取访问令牌的流程,则将有更多帮助。例如,implicit_grant_flow不适用于应用程序权限。

答案 1 :(得分:0)

就我而言,问题与端点和租户有关。我一直在使用通用的租户make api调用令牌,因为这是AzureAD中为我的应用程序列出的内容。我发现,为了获得应用程序客户端权限,在获取具有适当角色的令牌时,必须使用我的特定租户ID,例如“ https://login.microsoftonline.com/ tenant_id / oauth2 / token”。