編集:解決策を見つけました。最後を見てください。
現在、エミュレーターで実行している Azure 用の ASP.NET Web ロールがあります。Google と Live ID を ID プロバイダーとして使用できるように、デフォルトの実装を変更しました。Identity & Access Extension を使用して、Web.Config ファイルを調整しました。
問題は、ClaimsPrincipal としてユーザーを介してクレームにアクセスすると、ID プロバイダー (Google など) からのクレームのみが表示されることです。証明書利用者プログラム (ACS ポータルで定義) のルール グループには、関連付けられたパススルー ルールすらありませんが、それらの要求は取得されます。一方、クレーム ルールを追加して、Google から提供された名前クレーム タイプをカスタム出力値に変更しましたが、コード ビハインドからは Google からの値しか表示されません。
私の質問: ID プロバイダーの要求に基づいて発行者 (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 は次のとおりです。 3a7777%2f "
私のテストルールは次のようになります。
解決策:問題は、ACS のレルムとして「 http://localhost:7777/ 」を持っていたのに、Identity & Access ツールで 127.0.0.1 を指定したことです。私のプログラムが ID プロバイダーを選択するために ACS を要求したとき、WebRole11 という名前の証明書利用者が、パススルー ルールを含む 127.0.0.1 に対して自動的に作成されました。自動的に作成された Relying Party Application Settings が私の代わりに使用されたため、私のカスタム ルールは適用されませんでした。