2013-08-13 29 views
8

Cập nhật 2Mạo danh và không đồng bộ của trong ASP.NET WebAPI

Câu hỏi này ban đầu là "Có hoạt động mạo danh với Web API?"
Và câu hỏi cho câu hỏi đó là "Có, có."

Nhưng vấn đề không phải là về API Web mà là sự mạo danh. (Mô tả sự cố bên dưới)

Nhưng bây giờ tôi muốn nói với người khác về giải pháp.

Bộ điều khiển của tôi không đồng bộ và tiền đề sai lầm của tôi là bất kỳ chuỗi nào được sinh ra bởi chuỗi giả mạo đều có cùng một định danh với tên gốc.
Theo mặc định, nó là sai: TPL không chạy mạo danh trên các chuỗi.

Luồng mạo danh có thể được bật programmatically or in configuration.
Lưu ý, vui lòng thực hiện các thay đổi đối với aspnet.config tệp chứ không phải web.config của ứng dụng của bạn.

this post có thể đặt tệp aspnet.config cho mỗi nhóm ứng dụng.

this post liên kết mà Andrew cung cấp cho toàn bộ nhiệm vụ chi tiết hơn.

Đối với những người trong số các bạn sẽ lần lượt mạo danh lần đầu tiên tôi muốn lưu ý rằng IIS 7.5 có một tính năng rất hay để nhập thông tin đăng nhập của tài khoản mạo danh. Các thông tin đăng nhập này không cần thiết trong tập tin cấu hình và nó là sifficient để viết chỉ.

<identity impersonate="true"/> 

Sau khi nhập thông tin đăng nhập, chúng sẽ tự động được thêm vào tệp cấu hình.

enter image description here enter image description here

gốc câu hỏi:

Tôi quay mạo danh trên và cung cấp thông tin người dùng.

<identity impersonate="true" usernName="foo" password="bar"/> 

Nhưng khi tôi kết nối với máy chủ sql thông qua Entity Framework, tôi gặp lỗi "Đăng nhập không thành công cho người dùng {MachineName} $". Đó là EF chạy dưới tài khoản IUSR. Trong khi đó WindowsIdentity.GetCurrent() trả về danh tính của người dùng 'foo'.

Tài khoản bị mạo danh có tất cả các quyền cần thiết trên máy chủ SQL, nơi tính năng xác thực Windows được bật.

Hơn nữa, nếu tôi vô hiệu hóa mạo danh và chỉ đặt nhóm ứng dụng chạy với thông tin xác thực của danh tính này, mọi thứ đều hoạt động tốt.

Tôi không thể hiểu tại sao nó không hoạt động khi mạo danh được bật nhưng AppPool chạy trong tài khoản mặc định.

Cập nhật 1

EF chuỗi kết nối là

<add name="PtKbEntities" connectionString="metadata=...;provider=System.Data.SqlClient;provider connection string=&quot;data source=...;initial catalog=...;Trusted_Connection=Yes;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

tôi lưu trữ ứng dụng trên Win2008 SRV, IIS 7.5

+0

như thế nào connectionstring sql của bạn trông như thế nào? –

+0

@AndrewFlierman Tôi đã thêm nó vào câu hỏi –

Trả lời

4

Như answer này giải thích; sự mạo danh trong web.config ghi đè danh tính trong nhóm ứng dụng.

Theo tôi có một lời giải thích tốt here cái nào để sử dụng: mạo danh hoặc ứng dụng hồ bơi

+0

Nó mũ để ghi đè lên, nhưng nó không phải trong trường hợp của tôi. Vâng, có vẻ như tôi đã tìm ra lý do nhưng sẽ chỉ kiểm tra vào ngày mai. Bộ điều khiển API của tôi không đồng bộ và tôi truy cập EF trong một chủ đề riêng biệt mà không có luồng mạo danh được bật. Nhưng có điều kỳ lạ là lỗi hiển thị IUSR chứ không phải tài khoản DefaultAppPool. –

+0

ah ok, không đồng bộ. Có lẽ bài đăng này hữu ích: http://blog.codeishard.net/2012/09/17/await-async-mvc-and-impersonation/ và bài đăng này: http://blog.codeishard.net/2013/06/ 25/1301 / –

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