用于本机应用程序的Oauth2流程,后端Web应用程序调用Graph API

时间:2017-11-02 13:37:12

标签: oauth-2.0 azure-active-directory adal

我有以下设置:

  • 网络应用程序(Jetty / Java)
  • 原生客户端(iOS)(调用我的webapp)
  • Microsoft Graph API(从我的webapp调用)

这个想法是用户应该使用他/她的Office 365凭据使用OpenID / Oauth2登录。然后,webapp将代表用户调用Microsoft Graph API(也是脱机)。

为实现这一目标,我非常确定我需要使用授权类型:“授权代码授予”。 我可以找到很多基于浏览器的应用程序的Oauth2流程示例,以及当本机应用程序直接调用Graph API时... 但我希望我的后端调用Graph API(并保持访问权限和刷新令牌)

所以问题是如何正确地做到这一点?这是我的想法。

  1. 从原生应用程序:打开浏览器,调用我的Web服务器,这将触发重定向到Azure /授权端点(例如:https://login.microsoftonline.com/[tenant]/oauth2/v2.0/authorize?client_id=[clientid]&response_type=code&scope=offline_access%20user.read%20calendars.readwrite&response_mode=query&state=12345&redirect_uri=my-scheme://oath2-code-reply

  2. 这将触发身份验证/授权,然后将访问代码发送回应用程序(使用自定义方案重定向:my-scheme:// oath2-code-reply)。

  3. 然后,应用程序可以使用此访问代码调用我的Web应用程序,我们可以在此处交换代码以进行刷新&访问代码,并为用户创建我们自己的会话。

  4. 这是正确的方法吗?

    或者整个流程是否应该在浏览器中出现,作为最后一步,我再次使用myapp-scheme://?sessionid = [our-own-session]?打开应用程序?

1 个答案:

答案 0 :(得分:1)

对于您的方案,您应该使用on-behalf-of-flow

可以用作参考的服务器端示例是https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof - 请注意,此示例是使用JavaScript SPA作为客户端的.NET示例 - 但希望它可以指导您。您可以使用this sample概述如何为您的网络API请求令牌。

请注意,您的商品为“1”。建议您使用'v2'端点。 'v2'端点有一些限制,包括您尝试完成的方案(请求访问Web API的令牌) - 请参阅this document,了解有关这些限制的信息,因此我的建议是使用 v1端点此时适用于您的方案 - 这意味着您只能验证公司帐户(而不是MSA)。我上面指出的文档和示例使用v1端点。