2013-02-20 22 views
10

Tôi gặp sự cố xảy ra trong một môi trường sản xuất đơn lẻ, rất dễ bị trầy xước.ContextSessionSecurityToken bị ghi đè khi người dùng thứ hai đăng nhập

Bạn có hai người dùng, A và B. Người dùng A đăng nhập, mọi thứ đều hoạt động tốt. Người dùng B đăng nhập và sau khi người dùng B đăng nhập, người dùng A hiện có cùng mã thông báo bảo mật như người dùng B.

Thiết lập WIF của chúng tôi khá chuẩn, chúng tôi tiêm một số yêu cầu tùy chỉnh trên mã thông báo, nhưng mọi thứ khác có tiêu chuẩn như cách mã thông báo được tạo và lưu trữ (được xử lý bởi WIF).

Cảm thấy như tôi có thể chạy vào một số trường hợp cạnh lạ với WIF rằng tôi không quen thuộc với

Cập nhật: Cả A và B có thể được trên các máy riêng biệt, hoặc các trình duyệt riêng biệt trên cùng một máy.

đâu chúng tôi có mã thông báo khi yêu cầu một dịch vụ

if (HttpContext.Current == null) 
    return null; 

if (HttpContext.Current.Cache == null) 
    return null; 

if (FederatedAuthentication.SessionAuthenticationModule == null) 
    return null; 

if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null) 
    return null; 

var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken; 
if (sessionToken.ClaimsPrincipal == null) 
    throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities == null) 
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities.Count == 0) 
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities"); 
if (sessionToken.ClaimsPrincipal.Identities[0] == null) 
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null) 
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property"); 

return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions, sessionToken); 

Nếu tôi thêm đăng nhập ở đây tôi có thể nhìn thấy sessionToken.ClaimsPrincipal.Identity.Name khác với tên nó được coi là vào thời điểm này.

+0

Bạn có nghĩa là Nhật ký trên PC, B sử dụng cùng một PC, cùng một phiên trình duyệt hoặc cái gì? – nzpcmad

+2

Không thể nếu trang web được duyệt từ hai máy/trình duyệt khác nhau. Các thẻ được đăng lên trang web và được lưu giữ trong cookie. Không có cách nào để điều này được chia sẻ giữa những người dùng trừ khi bạn làm điều gì đó không đúng cách như lưu trữ dữ liệu trong các biến tĩnh. –

+0

@nzpcmad bạn có thể sử dụng hai trình duyệt khác nhau trên cùng một máy. Bạn có thể ở trên hai máy riêng biệt. – jcolebrand

Trả lời

0

Tôi đã gặp sự cố tương tự. Chúng tôi đã giải quyết nó đang thay đổi tiền mặt trên IIS và trong mã. Việc thanh toán tiền mặt đã gây ra sự an toàn dường như sai lầm nhưng máy chủ chỉ lưu trữ kết quả cuối cùng của html được tạo, làm cho nó trông giống như người dùng A đã đăng nhập và không phải người dùng B. Hy vọng điều này sẽ giúp một số.

1

Máy chủ của bạn và máy chủ STS (WIF) được lưu trữ trên cùng một IIS sử dụng cùng một hồ bơi Ứng dụng? Nếu có thì hãy thử bằng cách sử dụng hồ bơi ứng dụng khác nhau khi quy trình công nhân đôi khi sử dụng để làm hỏng mọi thứ. Hy vọng điều này sẽ giúp bạn.

0

Sẽ giúp ích nếu bạn đăng một số thông tin bổ sung về cả hai cài đặt cấu hình web cũng như cấu hình IIS và phiên bản .NET Framework. Đối với tôi, điều này nghe có vẻ giống như một vấn đề hồ bơi ứng dụng nhưng đó là với kiến ​​thức rất hạn chế của hệ thống của bạn. Nếu nhận dạng hồ bơi ứng dụng là tùy chỉnh thì tất nhiên truy cập cùng một người dùng, trừ khi hệ thống định vị hoặc mạo danh được đặt. Nếu đây không phải là vấn đề, hãy kiểm tra cài đặt ủy quyền của bạn và đảm bảo anonynous và cơ bản bị tắt hoặc bất kỳ ứng dụng nào của bạn có thể yêu cầu.

Các vấn đề liên quan