2012-11-21 31 views
13

Tôi đang di chuyển một trang ASP.Net sử dụng Active Federation và WIF 3.5 để sử dụng .Net 4.5. Chức năng của Windows Identity Foundation (WIF 3.5) hiện đã được tích hợp đầy đủ vào trong .Net 4.5 Framework.Làm cách nào để truy cập bộ sưu tập SecurityTokenHandlers trong WIF 4.5?

Vì các lớp học đã chuyển đến ba không gian tên khác nhau, nên phần lớn là bản dịch cơ học. Phần mà tôi gặp rắc rối với việc dịch GenericXmlSecurityToken do STS cấp cho một Hiệu trưởng yêu cầu bồi thường cho cuộc gọi đến SessionAuthenticationModule.WriteSessionTokenToCookie. Các tài liệu còn thiếu và tôi chỉ cần phải tìm cách WIF 4.5 để truy cập FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

Dưới đây là một đoạn của WIF 3,5 mã mà không biên dịch trong WIF 4,5 (WSTrust tạo kênh bỏ qua cho ngắn gọn):

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); 

Trả lời

14

Việc sửa lỗi hóa ra khá đơn giản (Nếu không rõ ràng ngay lập tức).

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers 

dịch để WIF 4.5 như

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers 

duy nhất thay đổi khác được thay thế phương thức gọi ClaimsPrincipal.CreateFromIdentity(identity) nhà máy với new ClaimsPrincipal(identity).

Dưới đây là đoạn làm việc:

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); 
+1

'FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers' - là gì *** namespace *** và *** lắp ráp ***? – Kiquenet

+0

@Kiquenet 'System.IdentityModel.Services', là một hội đồng riêng biệt –