1

编辑:我找到了解决方案,看看最后。

我目前正在使用模拟器运行 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>

用于将用户重定向到登录页面的 url 是:“ 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 & Access 工具中指定了 127.0.0.1。当我的程序请求 ACS 以选择身份提供者时,会自动为 127.0.0.1 创建一个名为 WebRole11 的依赖方,包括传递规则。所以我的自定义规则没有被应用,因为使用了自动创建的依赖方应用程序设置而不是我的。

4

0 回答 0