我有以下设置:
这个想法是用户应该使用他/她的Office 365凭据使用OpenID / Oauth2登录。然后,webapp将代表用户调用Microsoft Graph API(也是脱机)。
为实现这一目标,我非常确定我需要使用授权类型:“授权代码授予”。 我可以找到很多基于浏览器的应用程序的Oauth2流程示例,以及当本机应用程序直接调用Graph API时... 但我希望我的后端调用Graph API(并保持访问权限和刷新令牌)。
所以问题是如何正确地做到这一点?这是我的想法。
从原生应用程序:打开浏览器,调用我的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
这将触发身份验证/授权,然后将访问代码发送回应用程序(使用自定义方案重定向:my-scheme:// oath2-code-reply)。
然后,应用程序可以使用此访问代码调用我的Web应用程序,我们可以在此处交换代码以进行刷新&访问代码,并为用户创建我们自己的会话。
这是正确的方法吗?
或者整个流程是否应该在浏览器中出现,作为最后一步,我再次使用myapp-scheme://?sessionid = [our-own-session]?打开应用程序?
答案 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端点。