2010-01-25 31 views
8

tôi có trang web asp.net mvc ứng dụng mạng nội bộ. là có anyway để nắm bắt các cửa sổ đăng nhập nt từ wihtout người dùng có một hệ thống đăng nhập đầy đủ trong trang web. tôi không muốn cho phép nhưng tôi muốn làm một số đăng nhập vào máy chủ để theo dõi yêu cầu, vv. .chụp tên người dùng windows trong yêu cầu mvc asp.net

Trả lời

12

Bạn có thể sử dụng HttpContext.Current.User.Identity.Name nếu bạn thiết lập trang web để sử dụng Windows Authentication. Nhiều trình duyệt sẽ chuyển tên người dùng một cách minh bạch.

+0

có vẻ như với firefox, nó nhắc tên người dùng/pwd mặc dù IE dường như không yêu cầu nó. . bất kỳ ý tưởng nào về lý do tại sao điều này xảy ra – leora

+0

Dan Diplo - bất kỳ ý tưởng nào? – leora

+0

FireFox, theo mặc định, không chuyển vào tên người dùng. Tuy nhiên, nó có thể được thực hiện để làm việc - xem http://markmonica.com/2007/11/20/firefox-and-integrated-windows-authentication/ –

0

Nếu bạn đặt IIS sử dụng Xác thực Windows và trang web nằm trong Vùng Intranet cho khách hàng của bạn thì thông tin đăng nhập sẽ tự động xảy ra mà không có bất kỳ lời nhắc nào.

1

Phiên bản Windows nào là ứng dụng mvc này đang chạy?

Bạn có thể thử như sau:

  • Sử dụng IIS Manager để vô hiệu hóa truy cập nặc danh vào trang web, và chắc chắn rằng tiêu hóa và/hoặc cửa sổ xác thực được kích hoạt.
  • Thay đổi web.config của ứng dụng mvc để sử dụng Xác thực Windows
  • Truy cập tên đăng nhập trong bộ điều khiển bằng User.Identity.Name.

Việc đó có hiệu quả không?

1

Đến file Web.Config cho ứng dụng của bạn (hãy chắc chắn đó là một trong những chính, không phải là Web.Config dưới Views), nhận xét ra <authentication mode="Forms"> nếu bạn nhìn thấy nó, sau đó thêm dòng như thế này:

<authentication mode="Windows"/> 
<identity impersonate="true"/> 
<authorization> 
    <allow roles="DOMAIN\PersonnelGroup" /> 
    <allow users="DOMAIN\jdoe"/> 
    <deny users="*"/> 
</authorization> 

Bạn không cần phải bao gồm phần <authorization> nhưng sẽ hữu ích nếu bạn muốn cho phép quyền truy cập cho một số nhóm và người dùng nhất định và từ chối mọi người khác. Khi bạn sử dụng IE, thông tin đăng nhập sẽ được truyền tự động. Bạn có thể kiểm tra điều này bằng cách in tên người dùng theo quan điểm của bạn:

@HttpContext.Current.User.Identity.Name 

Nếu bạn mở trang web của bạn sử dụng Firefox hoặc bất kỳ trình duyệt khác ngoài IE, nó sẽ nhắc bạn cho tên người dùng và mật khẩu vì nó không tự động đi dọc theo các chứng chỉ (mặc dù rõ ràng bạn có thể nhận được Firefox để vượt qua các thông tin, như Dan Diplo đề cập ở trên).

Nếu bạn muốn chuyển các thông tin này cùng với một máy chủ khác, chẳng hạn như SQLServer, nó trở nên đau đầu hơn do trải nghiệm của tôi, vì bạn gặp phải vấn đề kép. Cách giải quyết duy nhất tôi biết là để lưu trữ IIS và SqlServer trên cùng một máy chủ, hoặc có một đăng nhập cho mạng nội bộ của bạn để bạn có tên người dùng và mật khẩu để chuyển sang SQLServer.

1

var s = HttpContext.User.Identity.Name;

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