背景 我们使用Azure ACS和ADFS进行WebAPI设置以进行身份验证。
通过浏览器访问任何WebAPI资源会将未经身份验证的用户重定向到通过ACS的ADFS登录页面。成功登录后,用户将被重定向以返回Url作为ACS中的设置以及安全令牌。这完全没问题。
问题: 我们正在使用Ionic框架(http://ionicframework.com/)开发移动应用程序。我们希望利用相同的ACS和ADFS进行身份验证,我们将其用于WebAPI。在此过程中,我们面临以下问题:
问题1: 通过移动应用程序(Ionic,cordova,angularjs)访问任何WebAPI资源会将用户重定向到ACS,我们会收到以下错误。
XMLHttpRequest无法加载https:// {domainname} .accesscontrol.windows.net / v2 / wsfederation?wa = ws ... 52fitem& wct = 2014-10-10T14%3a24%3a34Z& whr = https%3a%2f% 2F {域名} .COM。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。
因此,我们无法通过移动应用程序通过ACS对任何用户进行身份验证。
问题2: 在ACS中将返回URL设置为空会引发以下错误。 ACS90050:没有回复地址与依赖方委托人签订。
到目前为止采取的措施: - >我们在WebAPI上启用了CORS。
答案 0 :(得分:0)
我们向微软提交了票证,看看是否可以在ACS启用CORS。我们收到了以下回复。
ACS没有提供我们研究可能性的CORS解决方案。不幸的是,答案仍然是:“没有ACS不提供CORS解决方案”。也就是说,ACS不允许我们访问标准跨域解决方案的根。此外,提供令牌被视为HTTPOnly,因为使用Javascript操纵令牌本质上是危险的。
如果您希望采用此路径,可以提供可用的示例,但由于安全方面的原因,不推荐使用此示例。下载发现的样本:
Windows Azure AD访问控制(ACS)代码示例: https://code.msdn.microsoft.com/Windows-Azure-AD-Access-0dcde385
下面的示例:C#\ Webservice \ ACS2WindowsPhoneSample可能会提供一些指导,但我们无法协助修改样本。