我有点困惑如何获得适用于sharepoint站点以及图api的持有人令牌。
我们正在使用MFA(多重身份验证),因此我们会在用户尝试登录时收到短信。这一切都有效,我们得到一个令牌,但我指向的资源是https://srmukdev.sharepoint.com/,我们如何使用此令牌访问https://graph.microsoft.com/ api。
目前它还没有奏效。我可以单独登录请求,但我们不想这样做,因为它需要使用相同的令牌访问这两个部分?有没有一种方法可以将一个令牌转换为另一个令牌?至少有效的东西?
您可以看到当前的差异是ResourceUrl
我使用的sharepoint api详细信息
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
<add key="ida:Tenant" value="srmukdev.onmicrosoft.com" />
<add key="ida:ApplicationId" value="000000-0000-0000-0000-0000000" />
<add key="ida:RedirectUri" value="http://someuri/" />
<add key="ida.ResourceUrl" value="https://srmukdev.sharepoint.com/" />
我使用的图表api详细信息
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
<add key="ida:Tenant" value="srmukdev.onmicrosoft.com" />
<add key="ida:ApplicationId" value="000000-0000-0000-0000-0000000" />
<add key="ida:RedirectUri" value="http://someuri/" />
<add key="ida.ResourceUrl" value="https://graph.microsoft.com/" />
非常感谢
答案 0 :(得分:2)
让我们首先说明,您无法直接获得适用于Microsoft Graph API和SharePoint API的令牌。令牌是使用特定受众创建的,并且作为Web API的令牌验证的一部分,他们将检查令牌的受众是否与其唯一标识符匹配。
我认为这里的一个可能的解决方案是认识到Microsoft Graph令牌已经允许您访问SharePoint API。请参阅documentation here。您应该只能获得Microsoft Graph的令牌,然后使用Microsoft Graph特定的端点从SharePoint获取数据。这是Microsoft Graph尝试解决的问题之一。用于访问所有Microsoft数据的单个端点和令牌。
另一种解决方案是使用您收到的授权代码向两个不同的端点请求两个令牌。根据您使用的库以及您所遵循的具体流程,这可能比不完成更难,但通常情况下,authorization code grant flow用于登录用户。用户重定向到Microsoft登录页面,然后成功登录后,您的服务会收到授权代码,然后使用令牌端点交换访问令牌。此授权代码可用于获取客户端已配置为调用的任何资源的访问令牌,因此您可以使用两个不同的resource
值调用令牌端点两次,并获取两个访问令牌。我是在我的Python/Flask samples之一做的。
最后,假设您获得了特定资源的访问令牌和刷新令牌,您可以使用刷新令牌获取应用程序已获得授权的其他资源的令牌。
Azure AD发布的刷新令牌可用于访问多个 资源。例如,如果您有一个客户端应用程序 允许调用两个Web API,刷新令牌可用于获取 也是对其他Web API的访问令牌。
请参阅here了解如何执行此操作。