Oauth 2.0 具有后端web应用调用Graph API的本机应用的Oauth2流

Oauth 2.0 具有后端web应用调用Graph API的本机应用的Oauth2流,oauth-2.0,azure-active-directory,adal,Oauth 2.0,Azure Active Directory,Adal,我有以下设置: web应用程序(Jetty/Java) 本机客户端(iOS)(调用我的webapp) Microsoft Graph API(从我的webapp调用) 其想法是用户应该使用其Office 365凭据使用OpenID/Oauth2登录。然后,webapp将代表用户调用Microsoft Graph API(以及脱机) 为了实现这一点,我非常确定我需要使用授权类型:“授权代码授权”。 我可以找到很多基于浏览器的应用程序的Oauth2流示例,以及当本机应用程序直接调用Graph A

我有以下设置:

  • web应用程序(Jetty/Java)
  • 本机客户端(iOS)(调用我的webapp)
  • Microsoft Graph API(从我的webapp调用)
其想法是用户应该使用其Office 365凭据使用OpenID/Oauth2登录。然后,webapp将代表用户调用Microsoft Graph API(以及脱机)

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

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

  • 从本机应用程序:打开浏览器,调用my web server,这将触发重定向到Azure/授权端点(示例:

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

  • 然后,应用程序可以使用此访问代码调用我的web应用程序,我们可以将代码交换为刷新和访问代码,还可以为用户创建自己的会话

  • 这是正确的方法吗


    或者,如果整个流程出现在浏览器中,并且作为最后一步,我使用类似myapp scheme的内容再次打开应用程序://?sessionid=[我们自己的会话]?

    对于您的场景,您应该使用

    可以用作参考的服务器端示例是-注意,此示例是一个使用JavaScript SPA作为客户端的.NET示例-但希望它可以指导您。您可以使用此示例概述如何为web api请求令牌


    请注意,您的项“1.”表明您正在使用“v2”终结点。“v2”终结点有一些限制,包括您尝试完成的场景(请求Web API的访问令牌)-请参阅这些限制的相关信息,因此我建议在您的场景中使用v1端点,这意味着您只能验证公司帐户(而不是MSA)。我上面提到的文档和示例使用v1端点。

    谢谢Andre,我将查看这些链接!后续问题:我没有提到我们也有一个基于浏览器的客户端,它有一个更简单的方法(我们在Java后端拥有用户访问和刷新令牌)。有什么理由我们不能将本机客户端视为浏览器,实现与我在原始问题最后一句中提到的类似的功能吗?我现在可以自己回答。将本机应用视为浏览器并使用myapp scheme://?sessionid=[我们自己的会话]当重新打开应用程序时,将使我们面临会话劫持。我们还将构建自己的Oauth2流,这听起来不是一个好主意。测试了Andre现在描述的方法,它需要更多的编码和配置,但效果非常好!