2012-12-07 31 views
28

Tôi đã đọc một số câu hỏi về chủ đề này, chẳng hạn như here, here, herehere; nhưng không ai cung cấp giải pháp làm việc trong trường hợp của tôi.sử dụng xác thực cửa sổ với các nhóm thư mục hoạt động làm vai trò

Những gì tôi muốn làm:

Thực hiện thẩm định Windows cho một ứng dụng web mà chỉ được sử dụng bởi các nhân viên của chúng ta. Bằng cách này, họ không cần phải đăng nhập vào ứng dụng, nhưng đã được xác thực bằng cách đăng nhập vào các cửa sổ.

Ngoài ra, tôi cần hạn chế các khu vực nhất định của ứng dụng, dựa trên Nhóm bảo mật thư mục hoạt động mà người dùng có thể được chỉ định.

Vì vậy, tôi muốn có thể để trang trí Bộ xử lý/Hành động với

[Authorize(Roles="SomeRole")] 

Những gì tôi đã cố gắng:

Tôi có

<authentication mode="Windows" /> 

trong web.config của tôi. Và tôi đã thêm một số hoán vị của một <roleManager> như được tìm thấy trong một số bài viết được liên kết ở trên. Hiện tại, tôi có người quản lý vai trò này

<roleManager defaultProvider="WindowsProvider" 
    enabled="true" 
    cacheRolesInCookie="false"> 
     <providers> 
     <add 
      name="WindowsProvider" 
      type="System.Web.Security.WindowsTokenRoleProvider" /> 
     </providers> 
    </roleManager> 

như đã tìm thấy trong this bài đăng.

Vì vậy, nếu tôi trang trí bộ điều khiển với [Authorize], tôi có thể truy cập nó tốt.

Tuy nhiên:

tôi có thể nhìn thấy trong thiết lập người dùng của tôi trên mạng, rằng tôi là một phần của một nhóm bảo mật AD gọi là "CNTT". Nhưng nếu tôi trang trí cùng một bộ điều khiển với [Authorize(Roles="IT")] tôi nhận được màn hình trống được phục vụ bởi máy chủ phát triển asp.net cho 401 không được ủy quyền. Điều này là không mong muốn. Tôi nghĩ rằng tôi có thể xem trang khi tôi đăng nhập vào các cửa sổ và là một phần của nhóm "CNTT".

Hầu hết mọi thứ tôi tìm thấy về chủ đề này làm cho nó âm thanh rất đơn giản để thực hiện những gì tôi đang cố gắng làm, nhưng tôi rõ ràng thiếu một cái gì đó ở đây.

+0

Bạn đã thiết lập nhà cung cấp thành viên ASP.NET để sử dụng Active Directory chưa? Không chỉ là nhà cung cấp vai trò .... –

+0

@marc_s Tôi có ASpNetActiveDirectoryMembershipProvider được đặt làm mặc định trong web.config. Tôi có thể đăng bài đó nếu bạn cảm thấy có thể có lỗi khi gây ra sự cố. –

+1

Đây là một chuỗi cũ, nhưng với bảo mật AD, bạn có cần chỉ định miền không? [Authorize (Roles = @ "domainname \ SomeRole")] – steveareeno

Trả lời

34

Đối với dev Tôi đang sử dụng IISExpress với thuộc tính máy chủ phát triển của dự án MVC được thiết lập sao cho Xác thực ẩn danh bị tắt và Xác thực Windows được bật. Cấu hình web được triển khai bằng máy chủ xây dựng TFS của chúng tôi để kiểm tra và phát hành các máy chủ để xác thực cũng được thiết lập như trên và cũng hoạt động ở các vị trí đó.

Trong web.config của tôi, tôi có.

<system.web> 
.... 
     <authentication mode="Windows" /> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
     <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"> 
      <providers> 
      <clear /> 
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
      </providers> 
     </roleManager> 
.... 

    </system.web> 

tôi có thể sử dụng

[Authorize(Roles = @"DOMAIN\ADGroup")] 
Public ActionResult Index() 
{...} 

hoặc

public ActionResult Index() 
     { 
      var User = System.Web.HttpContext.Current.User; 
      if (User.IsInRole("DOMAIN\\ADGroup")) 
      { 
       return RedirectToAction("IRSAdmin"); 
      } 
      return View(); 
     } 

Sau khi tôi nhớ đến logoff và đăng nhập lại để cho phép tôi được trao cho nhóm AD đã được áp dụng.

+2

Lưu ý bổ sung trong trường hợp, như tôi, bạn đang đập đầu vào bàn trong vài giờ để sửa lỗi này: Logoff/Logon chỉ nhận thông tin đăng nhập mới của bạn khi bạn Kết nối vật lý với mạng công ty ... khi kết nối không dây của bạn không xuất hiện cho đến SAU KHI đăng nhập thì máy của bạn sẽ không nhận tư cách thành viên nhóm mới từ Domain Controller và bạn sẽ bị gãi đầu vì trong khi ... –

+0

@DanielHume đó là vì AD đồng bộ hóa tốt nhất trên các kết nối có dây. Bạn chỉ có thể chạy gpupdate trên dòng lệnh cho cùng một hiệu ứng –

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