单个授权请求中有多个资源

时间:2018-10-12 21:51:32

标签: azure authorization azure-active-directory microsoft-graph office365api

我们当前使用以下授权网址: https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Foutlook.office365.com

我们还希望使用Graph API,因此我添加了以下内容: https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Foutlook.office365.com%2F%26https%3A%2F%2Fgraph.microsoft.com

我在两种资源之间尝试了不同的定界符,但无法使其正常工作。每个资源分别工作。我希望一次支持一种以上的资源吗?

1 个答案:

答案 0 :(得分:3)

我认为您试图通过将多个值直接传递给resource参数来执行的操作将不起作用(可能不是受支持的方案,但是我要等到Microsoft的某人确认或找到Azure AD时,同时,这里有一个old blog post像这样,但这是一个博客,谈论SSO和2014年以前的旧版本:),所以不要只依赖于此。)

下面我将解释如何通过重用刷新令牌而不在同一个调用中传递两个资源ID的情况下使此方案工作。 (注意:此方法将适用于授权代码授予流,但不适用于基于JavaScript SPA的隐式授予流,因为在这种情况下不会返回刷新令牌)

  • 一旦可从授权端点获得授权代码,您将转到Azure AD令牌端点,为单个资源请求令牌(根据您的应用程序要求,使用对端点的REST调用或类似ADAL库的AcquireToken方法之类的东西)
  • 您会获得一个访问令牌+刷新令牌,作为对令牌端点调用的响应。访问令牌对于首次调用(例如graph.microsoft.com)中提到的资源有效
  • 然后使用您刚获得的刷新令牌,您再次调用令牌端点(REST或ADAL AcquireTokenSilent,以便第二次没有弹出窗口要求用户提供凭据)并获得一个在此调用的情况下,通过指定第二个资源ID来获取第二个资源的令牌
  • 这次获得的访问令牌对第二种资源有效。
  • 实际上您可以继续执行此操作,因此在某些地方会显示名称“多资源刷新令牌”。尽管现在所有刷新令牌都应该是多资源或有效的,可用于请求您的应用程序同意的任何资源。

可以帮助您进一步了解和实施的链接