编辑:我找到了解决方案,看看结尾。
我有一个Azure的ASP.NET Web角色,我目前正在使用模拟器运行。我修改了默认实现,以便我可以使用Google和Live ID作为身份提供商。我使用了Identity& Access Extension以调整我的Web.Config文件。
问题在于,当我通过User作为ClaimsPrincipal访问声明时,我只看到来自身份提供商(例如Google)的声明。我的依赖方计划的规则组(在ACS门户中定义)甚至没有关联的直通规则,但仍然可以获得这些声明。另一方面,我添加了一个声明规则,将Google提供的名称声明类型更改为自定义输出值,但从后面的代码我只看到来自Google的值。
我的问题: 我需要做什么才能根据身份提供商的声明从发行者(STS)发出令牌,以及如何从代码中访问此令牌?
我正在使用: Visual Studio 2012 .NET Framework 4.5
我的Web.config部分:
<system.web>
<authentication mode="None" />
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />
...
</system.web>
...
<appSettings>
<add key="ida:FederationMetadataLocation" value="https://mynamespace.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml" />
<add key="ida:Issuer" value="https://mynamespace.accesscontrol.windows.net/v2/wsfederation" />
<add key="ida:ProviderSelection" value="ACS" />
</appSettings>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=bla" preCondition="managedHandler" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=bla" preCondition="managedHandler" />
</modules>
</system.webServer>
<system.identityModel>
<identityConfiguration>
<audienceUris>
<add value="http://127.0.0.1:7777/" />
</audienceUris>
<issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=bla">
<trustedIssuers>
<add thumbprint="myRelyingPartyThumbprint(from ACS Portal)" name="https://mynamespace.accesscontrol.windows.net/" />
</trustedIssuers>
</issuerNameRegistry>
<certificateValidation certificateValidationMode="None" />
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://mynamespace.accesscontrol.windows.net/v2/wsfederation" realm="http://127.0.0.1:7777/" requireHttps="false" />
</federationConfiguration>
用于将用户重定向到登录页面的网址是:“https://mynamespace.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http%3a%2f%2f127.0.0.1%3a7777%2f”
我的测试规则就像这样:
解决方案:问题是我在ACS中有“http://localhost:7777/”作为领域,但我在Identity&amp; amp;访问工具。当我的程序请求ACS以选择身份提供者时,会自动为127.0.0.1创建名为WebRole11的依赖方,包括传递规则。因此,我的自定义规则未应用,因为使用了自动创建的依赖方应用程序设置而不是我的。