2013-03-13 26 views
5

Tôi đang sử dụng ACS 2.0 trong ứng dụng MVC 4 của mình.Không thể đăng xuất khỏi Active Directory khi sử dụng Azure ACS

Nó đã được định cấu hình để đăng nhập và nó hoạt động cho nhiều nhà cung cấp khác nhau bao gồm ADFS. Tôi cần triển khai chức năng đăng xuất.

Như this question đã lỗi thời, tôi đã sử dụng mã từ these samples:

Sau đây là cách nó trông giống như:

// Load Identity Configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration; 

    // Get wtrealm from WsFederationConfiguation Section 
    string wtrealm = config.WsFederationConfiguration.Realm; 
    string wreply = wtrealm; //return url 

    // Read the ACS Ws-Federation endpoint from web.Config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"]; 

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint)); 

    signoutRequestMessage.Parameters.Add("wreply", wreply); 
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm); 

    FederatedAuthentication.SessionAuthenticationModule.SignOut(); 

    var signoutUrl = signoutRequestMessage.WriteQueryString(); 

Kết quả là, tôi nhận được URL đăng nhập ra nơi tôi nên chuyển hướng , nó sẽ vứt bỏ các thẻ và gửi lại cho tôi. URL trông giống như sau:

https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f 

Kết quả là nó hoạt động như dự kiến ​​cho tài khoản Google, Yahoo và Microsoft. Khi tôi đăng xuất và cố gắng truy cập khu vực được bảo vệ, tôi nhận được danh sách các nhà cung cấp danh tính và tôi phải đăng nhập lại, ngay cả khi tôi chọn cùng một nhà cung cấp.

Nhưng khi tôi sử dụng nhà cung cấp ADFS, nó hoạt động như thế:

  • tôi bấm đăng xuất và nhận được đến trang của các nhà cung cấp có sẵn

  • Tôi chọn nhà cung cấp ADFS lại

  • Tôi đến khu vực được bảo vệ bằng thông tin đăng nhập AD cũ của mình

  • Nếu tôi có ADFS là nhà cung cấp duy nhất, bước 2 f rom ở trên bị bỏ qua và Tôi liên tục đăng nhập mà không có khả năng thay đổi người dùng.

Như tôi thấy điều gì xảy ra, ACS không hủy bỏ mã thông báo bảo mật mà nó nhận được từ ADFS và sử dụng lại nó.

Bạn có bất kỳ khách hàng tiềm năng nào về cách tôi có thể buộc ACS xử lý mã thông báo này không?

Cảm ơn trước!

+1

ACS không bao giờ lưu mã thông báo trong cookie trong trường hợp này. Các cookie duy nhất là tại ADFS và RP của bạn. Nếu bạn đang ở trên một máy liên kết miền, tôi nghi ngờ rằng ADFS có thể được cấu hình để tự động đăng nhập bạn. Bạn có thể xác nhận liệu ban đầu bạn có phải sử dụng tên người dùng/mật khẩu để đăng nhập hay không và liệu bạn có tự động đăng nhập khi sử dụng cửa sổ trình duyệt Riêng tư không? –

+0

Oren, tôi xác nhận rằng tôi phải đăng nhập lần đầu tiên - máy của tôi không nằm trong miền đó. Hành vi tương tự trên cửa sổ trình duyệt Riêng tư. Và tôi nghi ngờ rằng một mã thông báo giữa ADFS và RP không được xử lý. Nếu bạn sẵn sàng trợ giúp, hãy cho tôi biết twitter/fb/e-mail của bạn. Tôi sẽ gửi cho bạn URL và tài khoản AD để xem và tôi cũng có thể chia sẻ nguồn. –

+0

CẬP NHẬT: Tìm thấy bạn trên Facebook và chia sẻ thông tin đăng nhập và URL. Hãy cho tôi biết nếu bạn cần nguồn. –

Trả lời

0

+1 cho câu trả lời của @ oren-melzer: trình duyệt cache http thông tin cơ bản và tự động gửi lại chúng. Di chuyển đến biểu mẫu auth (sử dụng cookie) hoặc khi đăng xuất, đặc biệt từ chối tiêu đề auth của trình duyệt, liên tục quay lại 401. Đôi khi điều này "trả lại 401 cho thông tin xác thực hợp lệ" hoạt động để xóa trình duyệt, đôi khi bạn phải yêu cầu người dùng đóng trình duyệt .

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