我们使用Azure Active Directory身份验证开发了一个MVC5应用程序。当作为Web App部署到Azure时,一切都很完美。但是,我们已被要求部署为云服务。
创建了一个新的云服务项目,将MVC项目添加为角色,向云服务添加了2个端点HTTP / HTTPS。创建自签名证书并应用于HTTPS端点。
本地调试
在本地调试IIS Express和Azure Compute Emulator中,一切运行良好。 初始请求指向http://localhost:7390(IISe http端口) 重定向到Microsoft AD登录,然后重定向到https://localhost:4430(IISe https端口),并在自签名证书的预期证书警告后正确显示主页。
Azure云服务
应用程序已作为云服务部署推送到Azure 自签名证书已上载到Azure。
Azure Active Directory已为应用添加了一个条目(使用云服务发布URL,如下所示)
登录网址:http://xxxxxxxxtest.cloudapp.net/
APP ID URI:http://xxxxxxxxtest.cloudapp.net/
回复ULR:http://xxxxxxxxtest.cloudapp.net/
当访问网站http://xxxxxxxxtest.cloudapp.net/时,重定向到Microsoft AD signin会按预期发生,但在成功登录后,我们会重定向到 https://localhost:4430 ,就像它在本地运行一样测试环境。
完全坚持这个!
TIA 马丁。
答案 0 :(得分:5)
我已经解决了这个问题。
Azure Active Directory / Application中的APP ID URI与以下键中web.config中定义的值不匹配
在Azure中导航到Active Directory / Applications 选择应用程序并导航到配置 获取APP ID URI值。对于我的测试应用程序,我将其设置为
http://xxxxxxxxtest.cloudapp.net/WebRole
编辑web.config
ida:Realm和ida:AudienceUri值必须与APP ID URI匹配
领域值必须匹配APP ID URI
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="ida:FederationMetadataLocation" value="https://login.windows.net/yyyyyyyy.onmicrosoft.com/FederationMetadata/2007-06/FederationMetadata.xml" />
**<add key="ida:Realm" value="http://xxxxxxxxtest.cloudapp.net/WebRole" />**
**<add key="ida:AudienceUri" value="http://xxxxxxxxtest.cloudapp.net/WebRole"/>**
</appSettings>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://login.windows.net/yyyyyyyy.onmicrosoft.com/wsfed"
**realm="http://xxxxxxxxtest.cloudapp.net/WebRole"** requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
通过Microsoft Active Directory登录后确保这些匹配的Web应用程序正确运行。
如果URI不匹配,似乎重定向到https://localhost:44300是一个后备。
在“开发服务器”SSL URL的MVC属性中定义的本地开发的值(可以通过在解决方案中突出显示MVC项目并按F4来访问)随应用程序一起发布到云服务并在所有情况下使用AD身份验证后不太好。我通过将SSL URL更改为localhost:44313来确认这一点,打破了配置,它确实尝试重定向到44313.