2016-09-09 19 views
5

Tôi có một ứng dụng bằng cách sử dụng phần mềm trung gian OWIN cho OpenIdConnect. Tệp startup.cs sử dụng việc triển khai tiêu chuẩn app.UseOpenIdConnectAuthentication. Cookie được đặt thành trình duyệt nhưng lỗi xảy ra với:OWIN OpenIdConnect Middleware IDX10311 nonce không thể được xác nhận

IDX10311: RequireNonce là 'true' (mặc định) nhưng validationContext.Nonce is null. Một nonce không thể được xác nhận. Nếu bạn không cần phải kiểm tra nonce, hãy đặt OpenIdConnectProtocolValidator.RequireNonce thành 'false'.

Tôi đã tìm thấy rằng khi chạy fiddler như tôi đã làm đối với hầu hết các dự án gỡ lỗi, hành vi này sẽ xảy ra. Lỗi được trả về, nhưng nếu tôi quay trở lại trang web, mọi thứ đang hoạt động và người dùng của tôi được xác thực. Có ai nhìn thấy hành vi này khi chạy fiddler?

Với cáy:

  • SecurityTokenValidated thông báo trong OpenIdConnect được thực hiện hai lần.
  • Sau khi vượt qua lỗi thứ hai thông qua lỗi IDX10311 được ném
  • Trình duyệt chứa cookie hợp lệ, quay trở lại trang Tôi có thể xem dữ liệu Người dùng.Identity hợp lệ.

Chạy mà không cáy:

  • SecurityTokenValidated thực hiện một lần trong OpenIdConnect
  • Không có lỗi ném hoặc thu để tải lên controller action cho bài thẩm định chuyển hướng Uri
  • Cookie cũng có giá trị và dữ liệu User.Identity chính xác.

Ý tưởng? Tôi có thể đi xung quanh nó mà không chạy fiddler, nhưng khi gỡ lỗi nó sẽ được tốt đẹp để chạy fiddler để kiểm tra giao thông.

+0

Có thể điều này? https://github.com/IdentityServer/IdentityServer3/issues/542 –

+0

Cảm ơn Brock. Tôi đã xem xét chủ đề đó trong quá khứ. Có vẻ như đối với nhiều người, đó là một vấn đề chưa được giải quyết. Tôi sẽ kiểm tra đề xuất của bạn từ thread mặc dù. Tôi hy vọng nó không phải là một lỗi MS Katana mặc dù như Dominick đề nghị như MS đã không cập nhật gói nuget trong một thời gian. – gilm0079

+1

@ gilm0079 bạn có tìm thấy giải pháp không? –

Trả lời

5

Có thể đây là nguyên nhân?

Xin chào, tôi nghĩ rằng tôi đã tìm thấy nguyên nhân gốc rễ của vấn đề này.

Tôi đang tổng hợp những khám phá của tôi:

  1. Vấn đề là trong cookie OpenIdConnect.nonce.OpenIdConnect

  2. Cookie này được thiết lập từ các ứng dụng (chúng ta hãy gọi đây là "ID Client") ngay khi OpenID Middleware bắt đầu phiên xác thực

  3. Cookie phải được gửi lại từ trình duyệt đến "ID Client" ngay sau khi xác thực hoàn tất. Giả định của tôi là cookie này là cần thiết để có một kiểm tra kép từ điểm khách hàng ID xem (tức là tôi thực sự bắt đầu một dòng ủy quyền OpenID Connect?)

  4. Rất nhiều nhầm lẫn trong tôi là do "Nonce "hạn, được sử dụng cả trong cookie này và trong luồng OpenID Connect từ máy chủ ID.

  5. Trường hợp ngoại lệ, trong trường hợp của tôi, là do cookie mất tích (không phải là nonce của ID Server), đơn giản chỉ vì nó không được gửi bởi trình duyệt trở lại "khách hàng ID"

Vì vậy, chính gốc, trong trường hợp của tôi, là: OpenIdConnect.nonce.OpenIdConnect cookie đã không được gửi lại cho khách hàng ID của trình duyệt. Trong một số trường hợp (ví dụ: Chrome, Firefox và Edge) cookie đã được gửi chính xác, trong khi ở những người khác (IE11, Safari) nó không được.

Sau nhiều nghiên cứu, tôi phát hiện ra rằng vấn đề nằm trong chính sách hạn chế Cookie, được xác định trên trình duyệt. Trong trường hợp của tôi, "ID khách hàng" được nhúng trong một. Điều này làm cho "ID Client" được xem như là một "khách hàng của bên thứ ba", bởi vì người dùng không điều hướng đến URL đó trực tiếp trong cửa sổ chính. Bởi vì đây là một bên thứ ba, đối với một số trình duyệt, cookie của nó phải bị chặn. Thật vậy, hiệu ứng tương tự có thể đạt được trên Chrome, bằng cách đặt "Chặn cookie của bên thứ ba".

Vì vậy, tôi phải kết luận rằng:

a) Nếu iframe là điều bắt buộc (như trong trường hợp của tôi, bởi vì "Khách hàng ID" là những ứng dụng phải chạy bên trong nội dung đồ họa của ứng dụng nền tảng chính của chúng tôi) , Tôi nghĩ giải pháp duy nhất là chặn lỗi và xử lý nó bằng một trang, yêu cầu người dùng bật cookie của bên thứ ba.

b) Nếu iframe không phải là phải, nó đủ mở "Client ID" trong cửa sổ mới.

Hy vọng điều này sẽ giúp ai đó, bởi vì tôi phát điên!

Marco

+0

nhấn mạnh nhận xét của tôi. Tôi đã suy nghĩ về một vấn đề máy chủ ID khác nhau. Mặc dù, câu trả lời của bạn dường như là về một cái gì đó khác hơn những gì tôi nhìn thấy. Vấn đề của tôi chỉ xảy ra khi tôi chạy fiddler để kiểm tra giao thông trong khi gỡ lỗi dự án. nó hoạt động tốt nếu không. – gilm0079

+0

đối với tôi, có vẻ như đó là vấn đề về trình duyệt. IE11 đã tái tạo vấn đề này, trong khi FF - không. Cảm ơn các đề xuất – Vladislav

1

Tôi biết nó một bài cũ nhưng tôi có vấn đề này và không có gì đang làm việc cho tôi, sau khi mất trí đằng sau một giải pháp để thực hiện các công trình ứng dụng doanh nghiệp của tôi, tôi kết thúc sửa chữa nó bằng cách thiết lập đa tùy chọn tenanted để có trong azure (trong Azure chọn: đăng ký ứng dụng> cài đặt> thuộc tính, đặt đa tenanted thành có và nhấp vào lưu).

hy vọng nó giúp ai đó, không thể thấy không ai đề cập đến nó.

3

tôi đã cùng một vấn đề nhưng chuyển đổi qua lại các Microsoft.Owin.Security.OpenIdConnect lên phiên bản 3.0.1 đã giải quyết được vấn đề

0

tôi nhận thấy lỗi này khi chạy IIS Express trong nền khi tôi đã chuyển sang lưu trữ trong IIS đầy đủ. Khi tôi vô hiệu hoá IIS Express, lỗi của tôi đã biến mất.

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