代码之家  ›  专栏  ›  技术社区  ›  Henrik

具有后端web应用程序调用图形API的本机应用程序的Oauth2流

  •  1
  • Henrik  · 技术社区  · 7 年前

    我有以下设置:

    • web应用程序(Jetty/Java)
    • 本机客户端(iOS)(调用我的webapp)
    • Microsoft Graph API(从我的webapp调用)

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

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

    1. 从本机应用程序:打开浏览器,调用我的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

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

    这是正确的方式吗?

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andre Teixeira    7 年前

    对于您的场景,您应该使用 on-behalf-of-flow .

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

    注意,您的物品“1”表明您正在使用“v2”端点。“v2”端点有一些限制,包括您试图实现的场景(请求Web API的访问令牌)-请参阅 this document 因此,我建议使用 v1端点 目前,对于您的场景,这意味着您只能验证公司帐户(而不是MSA)。我上面提到的文档和示例使用v1端点。