2012-11-22 23 views
24

Tôi đang sử dụng công cụ 4.5 WIF mới để xác thực người dùng trang web và bảo mật thông tin liên lạc giữa trang web MVC và các dịch vụ WCF của tôi.WIF 4.5 BootstrapContext security token null

Tôi có trang web được định cấu hình để lưu ngữ cảnh khởi động để tôi có thể sử dụng lại cùng một mã thông báo bảo mật cho tất cả các yêu cầu cho lớp dịch vụ.

Trong điều kiện bình thường, tất cả đều hoạt động tốt với mỗi yêu cầu trang web được xác thực và SecurityToken có sẵn thông qua ngữ cảnh để bảo đảm các cuộc gọi WCF.

Nếu tên miền ứng dụng trang web được đặt lại (ví dụ: xây dựng ứng dụng trong khi phát triển), mọi yêu cầu đến trang web sẽ vẫn được xác thực nhưng SecurityToken không còn khả dụng trong ngữ cảnh để chuyển sang cuộc gọi WCF nữa.

Debugging BootstrapContext nó có 4 thuộc tính hữu ích:

SecurityToken 
SecutiryTokenHandler 
Token 
TokenBytes 

Pre-app miền reset thẻ bảo mật và SecurityTokenHandler có giá trị, và sau khi reset Mã có một giá trị. Khi bạn đặt lại giá trị cho Mã thông báo sau khi đặt lại, có vẻ như đây là XML SAML thô để tôi có thể bù lại toàn bộ SecutiryToken từ nó nhưng điều này có vẻ là hành vi lạ mà tôi không thể tìm thấy bất kỳ tài liệu nào về.

Bất kỳ ý tưởng nào tôi có thể làm để đảm bảo SecurityToken luôn có sẵn để giúp tôi giải quyết vấn đề với XML mã thông báo?

Cập nhật

Sử dụng dotPeek để nhìn vào những gì đang xảy ra trong mã nguồn khuôn khổ tôi có thể thấy con đường thực hiện điều đó casues hành vi này nhưng tôi không thể xác định bất cứ lý do tại sao nó cần thiết để được theo cách này và làm thế nào nó có thể được avioded.

Cuối cùng tôi đã từ bỏ cố gắng làm việc nó ra và bây giờ sử dụng đoạn mã sau đây để đảm bảo tôi có một mã thông báo

if (context.SecurityToken != null) 
{ 
    token = context.SecurityToken; 
} 
else if (context.Token.IsNotEmpty()) 
{ 
    var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers; 
    token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token))); 
} 

gì Tôi bây giờ lo lắng về là tôi đã bỏ lỡ một số lý do đằng sau này behaiour và sửa chữa của tôi ở trên sẽ nổ tung tại một số điểm.

+0

OWIN không giống WIF? – Kiquenet

Trả lời

4

Tôi đã tình cờ gặp vấn đề tương tự. Tôi thấy Mã thông báo có biểu diễn xml của mã thông báo và SecurityToken bị thiếu. Tôi cũng nhận thấy rằng điều này thực sự dễ tái tạo bằng cách giết w3wp.exe.

+0

+1 để giết các bước repro w3wp.exe – Josh

0

Tôi gặp vấn đề tương tự khi triển khai mẫu ClaimsAwareWebFarm từ microsoft. Sự cố phát sinh khi bạn thêm phần này vào web.config:

<caches> 
    <sessionSecurityTokenCache type="CacheLibrary.SharedSessionSecurityTokenCache, CacheLibrary"> 
     <!--cacheServiceAddress points to the centralized session security token cache service running in the web farm.--> 
     <cacheServiceAddress url="http://localhost/SecurityTokenCacheService/SessionSecurityTokenCacheService.svc" /> 
    </sessionSecurityTokenCache> 
    </caches> 

Cảm ơn bạn Matt vì cách giải quyết này!

1

Tôi đã giải quyết được sự cố bằng cách xóa cookie của trình duyệt, bao gồm cả cookie Fedauth. Sau khi gỡ lỗi lại, tôi có thể nhận được tất cả các giá trị cần thiết