本机应用程序的 Oauth2 流程,后端 Web 应用程序调用 Graph API
Oauth2 flow for native app with back-end web app calling Graph API
我有以下设置:
- 网络应用程序(Jetty/Java)
- 一个本地客户端(iOS)(调用我的 webapp)
- Microsoft Graph API(从我的网络应用调用)
想法是用户应使用 his/her Office 365 凭据通过 OpenID/Oauth2 登录。然后,webapp 将代表用户(离线)调用 Microsoft Graph API。
要实现这一点,我很确定我需要使用授权类型:"Authorization code grant"。
我可以找到很多基于浏览器的应用程序的 Oauth2 流程示例,以及当本机应用程序直接调用 Graph API 时...... 但我希望我的后端调用 Graph API(并持有访问和刷新令牌)。
所以问题是如何正确地做到这一点?这是我目前的想法。
从本机应用程序:打开浏览器,调用我的 Web 服务器,这将触发到 Azure /authorize 端点的重定向(示例: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
这将触发 authentication/authorization,然后将访问代码发送回应用程序(使用自定义方案重定向:my-scheme://oath2-code-reply)。
然后该应用程序可以使用此访问代码调用我的网络应用程序,我们可以在其中交换代码以获取刷新和访问代码,还可以为用户创建我们自己的会话。
这是正确的方法吗?
或者整个流程应该在浏览器中进行,作为最后一步,我再次使用 myapp-scheme://?sessionid=[our-own-session]?
之类的内容打开应用程序
对于您的场景,您应该使用 on-behalf-of-flow。
您可以用作参考的服务器端示例是 https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof - a note is that this sample is a .NET sample using a JavaScript SPA as a client - but hopefully it can guide you. You can use this sample,其中概述了如何为您的网站请求令牌 api。
请注意,您的项目“1”。建议您正在使用 'v2' 端点。 'v2' 端点有一些限制,包括您尝试完成的场景(请求 Web 访问令牌 API)- 请参阅 this document 了解有关这些限制的信息,因此我的建议是在此时为您的场景使用 v1 端点——这意味着您只能验证公司帐户(而不是 MSA)。我上面指出的文档和示例使用 v1 端点。
我有以下设置:
- 网络应用程序(Jetty/Java)
- 一个本地客户端(iOS)(调用我的 webapp)
- Microsoft Graph API(从我的网络应用调用)
想法是用户应使用 his/her Office 365 凭据通过 OpenID/Oauth2 登录。然后,webapp 将代表用户(离线)调用 Microsoft Graph API。
要实现这一点,我很确定我需要使用授权类型:"Authorization code grant"。 我可以找到很多基于浏览器的应用程序的 Oauth2 流程示例,以及当本机应用程序直接调用 Graph API 时...... 但我希望我的后端调用 Graph API(并持有访问和刷新令牌)。
所以问题是如何正确地做到这一点?这是我目前的想法。
从本机应用程序:打开浏览器,调用我的 Web 服务器,这将触发到 Azure /authorize 端点的重定向(示例: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
这将触发 authentication/authorization,然后将访问代码发送回应用程序(使用自定义方案重定向:my-scheme://oath2-code-reply)。
然后该应用程序可以使用此访问代码调用我的网络应用程序,我们可以在其中交换代码以获取刷新和访问代码,还可以为用户创建我们自己的会话。
这是正确的方法吗?
或者整个流程应该在浏览器中进行,作为最后一步,我再次使用 myapp-scheme://?sessionid=[our-own-session]?
之类的内容打开应用程序对于您的场景,您应该使用 on-behalf-of-flow。
您可以用作参考的服务器端示例是 https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof - a note is that this sample is a .NET sample using a JavaScript SPA as a client - but hopefully it can guide you. You can use this sample,其中概述了如何为您的网站请求令牌 api。
请注意,您的项目“1”。建议您正在使用 'v2' 端点。 'v2' 端点有一些限制,包括您尝试完成的场景(请求 Web 访问令牌 API)- 请参阅 this document 了解有关这些限制的信息,因此我的建议是在此时为您的场景使用 v1 端点——这意味着您只能验证公司帐户(而不是 MSA)。我上面指出的文档和示例使用 v1 端点。