15

アクティブ フェデレーションと WIF 3.5 を使用する ASP.Net サイトを .Net 4.5 に移行しています。Windows Identity Foundation (WIF 3.5) の機能は、.Net 4.5 Framework に完全に統合されました。

クラスは 3 つの異なる名前空間に移動したため、ほとんどが機械的な変換の問題です。私が問題を抱えている部分はGenericXmlSecurityToken、STS によって発行された を への呼び出しのためにクレーム プリンシパルに変換することSessionAuthenticationModule.WriteSessionTokenToCookieです。ドキュメントが不足しており、WIF 4.5 へのアクセス方法を見つける必要があるだけです。FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

以下は、WIF 4.5 でコンパイルされない WIF 3.5 コードのスニペットです (簡潔にするために、WSTrust チャネルの作成は省略されています)。

var genericToken = channel.Issue(rst) as GenericXmlSecurityToken;

var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;

var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml)));
var identity = handlers.ValidateToken(token).First();

var sessionToken = new SessionSecurityToken(ClaimsPrincipal.CreateFromIdentity(identity),
                                            TimeSpan.FromMinutes(20));

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
4

1 に答える 1

16

修正はかなり単純であることが判明しました(すぐにわからない場合)。

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

次のように WIF 4.5 に変換されます。

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers

ClaimsPrincipal.CreateFromIdentity(identity)他の唯一の変更は、ファクトリ メソッド呼び出しをに置き換えたことnew ClaimsPrincipal(identity)です。

以下は作業スニペットです。

var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;

var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml)));
var identity = handlers.ValidateToken(token).First();

var sessionToken = new SessionSecurityToken(new ClaimsPrincipal(identity),
                                            TimeSpan.FromMinutes(20));

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
于 2012-11-21T18:07:49.660 に答える