配置 Azure ACS 以便当我在开发结构中本地运行时仍然可以进行身份验证的最佳方法是什么?
我只想配置一次,并且能够在本地开发并发布到 azure,而无需更改配置。只要我能以某种方式伪造声明,我什至愿意在本地开发时不使用联合身份验证。
您可以拥有 ofWeb.Config
和Web.Release.Config
(每个构建配置的转换文件)。Web.Config 用于您的本地开发,其中您有领域,受众 URL 指向您的本地地址,即 127.0.0.1。然后,您可以为 编写转换文件Web.Config
,例如Web.Release.Config
,您可以在其中编写转换以将上述值替换为实际部署 URL。我假设您将使用发布版本部署到 azure。
这就是你的 web.config.release 的样子......
<microsoft.identityModel>
<service>
<audienceUris>
<add value="https://abc.cloudapp.net/" xdt:Transform="Replace" />
</audienceUris>
<serviceCertificate xdt:Transform="Insert">
<certificateReference x509FindType="FindByThumbprint" findValue="AAAAAAAAAAAAAAAAAAAAAAAAAAA" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>
<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true" issuer="https://myacs.accesscontrol.windows.net/v2/wsfederation" realm="https://abc.cloudapp.net/" requireHttps="true" xdt:Transform="Replace" />
<cookieHandler requireSsl="true" xdt:Transform="Replace" />
</federatedAuthentication>
</service> </microsoft.identityModel>
最简单的方法是使用 bhavesh 所说的配置转换,尽管他发布的 web.config 自 NET 4.5 以来已经过时。
您可以将本地开发配置保存在 中web.config
,将云开发配置保存在中web.Debug.config
,将生产配置保存在web.Release.config
.
这是一个示例 web.Debug.config (仅相关部分):
<system.identityModel>
<identityConfiguration>
<audienceUris>
<add xdt:Transform="RemoveAll" />
<add value="http://myinstance.cloudapp.net/" xdt:Transform="Insert" />
</audienceUris>
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration >
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://mynamespace.accesscontrol.windows.net/v2/wsfederation" realm="http://myinstance.cloudapp.net/" reply="http://myinstance.cloudapp.net/" requireHttps="false" xdt:Transform="Replace"/>
</federationConfiguration>
</system.identityModel.services>
现在剩下要做的就是为您的 ACS 门户中的每个配置配置一个依赖方。
您实际上可以为所有 3 种配置配置一个 RP,但实现此目的的唯一方法是以编程方式使用服务管理 API,因为门户仅允许您为每个依赖方配置一个领域/返回 URL 值。
请注意,如果您决定这样做,则必须在 web.config(reply
属性)中设置返回 url,否则 ACS 将始终使用第一个配置的返回 url(您在门户中看到的那个)覆盖它。