ADFS 2.0、WIF (WS-Federation)、ASP.NET: Web.config で定義された http モジュールや IdentityFoundation 構成はありません (ほとんどの WIF SDK サンプルが示すように)。および SignInRequestMessage クラス。私はコードで ADFS に http リダイレクトを行いますが、正常に動作しているようで、クレームを返し、http 要求でシリアル化されたクレームを使用してユーザーを Web サイトにリダイレクトします。問題は、WIF クラス、プロパティ、およびメソッドを使用してこの要求を解析し、そこからクレーム値を抽出する方法です。ありがとう
質問する
681 次
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.CertificateValidator
はX509CertificateValidator.None
役に立ちませんでした coz Security Token Handler クラスは独自のハンドラー構成を使用し、STS 構成値を無視します。
于 2011-12-21T23:46:36.327 に答える