将本机iOS Azure SSO与多租户Web应用程序集成

时间:2016-12-08 23:21:16

标签: azure single-sign-on azure-active-directory

方案:我已经拥有一个与Azure SSO兼容的注册多租户Web应用程序。我现在正在开发一个iOS应用程序,它也将支持应用程序的SSO身份验证。

根据https://azure.microsoft.com/en-us/resources/samples/active-directory-ios/中提供的示例,我为iOS应用创建了一个原生应用,其中包含来自我的WebApp的委派权限(参考:https://stackoverflow.com/a/29810124)。

这适用于创建应用的AAD中存在的任何用户。但是,只要我想从之前授权WebApp的其他域中进行SSO,我就会收到错误:

Application with identifier 'CLIENT_ID_HERE' not found in directory DOMAIN_HERE.onmicrosoft.com

这意味着本机应用程序不是多租户?考虑到域外用户应该可以将SSO应用到应用程序中,这似乎有点奇怪。

目前,对于基于浏览器的SPA,我只需手动调用常见的Azure登录页面即可同意并获取用户的授权码。然后,我将此代码发送到后端(WebApp),后端执行OAuth握手并获取有效令牌。这不需要应用程序中的client_secret,因为SPA实际上并不执行令牌检索。

因此,当我尝试使用WebApp的client_id时(类似于https://stackoverflow.com/a/27033816建议的内容)我遇到了Azure AD iOS SDK的错误,要求我提供客户端密码为好。似乎SDK正在抽象相当数量并为您抓取令牌,而不是在我只需获取授权代码并将其发送到我的WebApp时执行一个步骤。

TLDR:我的要求与multiple-tenant, multiple-platform, multiple-services single sign-on using Azure Active directory中列出的要求非常相似,我有多个客户端(浏览器,iOS,Android)都需要能够使用Azure SSO。我假设移动应用程序应该能够使用我现有的WebApp来验证用户。

上一篇SO帖子的回答中提出的问题在某种程度上解释了我的问题:

  

我的移动应用如何代表用户访问我的多租户网络API?

参考

  1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-authentication-scenarios#native-application-to-web-api
  2. https://github.com/Azure-Samples/active-directory-dotnet-webapi-multitenant-windows-store

2 个答案:

答案 0 :(得分:1)

目前,在Azure门户网站上注册的本机应用程序不支持多租户。您可以考虑使用也支持Microsoft帐户的V2.0 endpoint

  

TLDR:我的要求与使用Azure Active目录的多租户,多平台,多服务单点登录中概述的要求非常类似,我有多个客户端(浏览器,iOS,Android),所有这些都需要能够使用Azure SSO。我假设移动应用程序应该能够使用我现有的WebApp来验证用户。

您的意思是说有不同的字体结尾而且多租户Web应用程序是后端吗?在这种情况下,无需在门户网站上注册另一个本机客户端应用程序,您可以参考here关于为iOS应用程序添加身份验证。

答案 1 :(得分:1)

因此,Microsoft的大多数教程都使用他们的AAD SDK来生成OAuth访问令牌,而我需要简单地将authorization_code发送到后端,该后端已注册为现有的多租户Web应用程序,因此它可以正常使用自己的client_id生成令牌。

这是使用AD OAuth code documentation中的正确redirect_uri完成的:

  

对于本地人和移动应用,您应使用默认值urn:ietf:wg:oauth:2.0:oob

请注意,发送urn:ietf:wg:oauth:2.0:oob实际上会导致多租户OAuth登录页面(https://login.windows.net/common/oauth2/authorize)出现架构错误,因此您必须改为使用https://login.microsoftonline.com/common/oauth2/nativeclient