1

ADFS 2.0、WIF (WS-Federation)、ASP.NET: Web.config で定義された http モジュールや IdentityFoundation 構成はありません (ほとんどの WIF SDK サンプルが示すように)。および SignInRequestMessage クラス。私はコードで ADFS に http リダイレクトを行いますが、正常に動作しているようで、クレームを返し、http 要求でシリアル化されたクレームを使用してユーザーを Web サイトにリダイレクトします。問題は、WIF クラス、プロパティ、およびメソッドを使用してこの要求を解析し、そこからクレーム値を抽出する方法です。ありがとう

4

1 に答える 1

1

私の経験を共有したい場合に備えて、将来誰かを助けるかもしれません. さて、私が最終的にたどり着いた解決策は次のようになります。

 var message = SignInResponseMessage.CreateFromFormPost(Request) as SignInResponseMessage;

 var rstr = new WSFederationSerializer().CreateResponse(message, new WSTrustSerializationContext(SecurityTokenHandlerCollectionManager.CreateDefaultSecurityTokenHandlerCollectionManager()));

 var issuers = new ConfigurationBasedIssuerNameRegistry();
 issuers.AddTrustedIssuer("630AF999EA69AF4917362D30C9EEA00C22D9A343", @"http://MyADFSServer/adfs/services/trust");

 var tokenHandler = new Saml11SecurityTokenHandler {CertificateValidator = X509CertificateValidator.None};   
 var config = new SecurityTokenHandlerConfiguration{
     CertificateValidator = X509CertificateValidator.None,
     IssuerNameRegistry = issuers};

 config.AudienceRestriction.AllowedAudienceUris.Add(new Uri("MyUri"));
 tokenHandler.Configuration = config;
 using(var reader=XmlReader.Create(new StringReader(rstr.RequestedSecurityToken.SecurityTokenXml.OuterXml)))
   {
     token = tokenHandler.ReadToken(reader);
   }
 ClaimsIdentityCollection claimsIdentity = tokenHandler.ValidateToken(token);

Saml11SecurityTokenHandler の代わりに SecurityTokenServiceConfiguration (トークン ハンドラーを含む) を使用してトークンを読み取って解析する同様のコードはほとんど見つかりませんでしたが、証明書の検証に失敗したため、うまくいきませんでした。設定SecurityTokenServiceConfiguration.CertificateValidatorX509CertificateValidator.None役に立ちませんでした coz Security Token Handler クラスは独自のハンドラー構成を使用し、STS 構成値を無視します。

于 2011-12-21T23:46:36.327 に答える