访问ACS令牌并声明规则不起作用

时间:2012-12-30 16:15:51

标签: asp.net azure wif acs

编辑:我找到了解决方案,看看结尾。

我有一个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

我的测试规则就像这样:

enter image description here

解决方案:问题是我在ACS中有“http://localhost:7777/”作为领域,但我在Identity&amp; amp;访问工具。当我的程序请求ACS以选择身份提供者时,会自动为127.0.0.1创建名为WebRole11的依赖方,包括传递规则。因此,我的自定义规则未应用,因为使用了自动创建的依赖方应用程序设置而不是我的。

0 个答案:

没有答案