2008-11-13 33 views
7

Tôi đang sử dụng dịch vụ WCF và điểm cuối net.tcp với PermissionMode chính của serviceAuthentication được đặt thành UseWindowsGroups.Sử dụng xác thực Vai trò Windows trong App.config với WCF

Hiện tại trong quá trình triển khai dịch vụ, tôi đang sử dụng thuộc tính PrincipalPermission để đặt yêu cầu vai trò cho từng phương pháp.

 [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 
     [OperationBehavior(Impersonation = ImpersonationOption.Required)] 
     public string method1() 

Tôi đang cố gắng thực hiện khá nhiều điều chính xác, ngoại trừ có cấu hình cho vai trò được đặt trong app.config. Có cách nào để làm điều này và vẫn đang sử dụng xác thực nhóm windows?

Cảm ơn

Trả lời

3

Nếu tôi hiểu rõ bạn muốn chọn vai trò trong thời gian chạy. Điều này có thể được thực hiện với nhu cầu permission trong hoạt động WCF. Ví dụ.

public string method1() 
{ 
    PrincipalPermission p = new PrincipalPermission(null, "Administrators"); 
    p.Demand(); 
    ... 
8

Nếu bạn đang lưu trữ dịch vụ WCF của bạn trong IIS, nó sẽ chạy trong quá trình lao động ASP.NET, có nghĩa là bạn có thể cấu hình xác thực và ủy quyền như bạn sẽ làm gì với các dịch vụ web ASMX:

<system.Web> 
    <authentication mode="Windows"/> 
    <authorization> 
     <allow roles=".\Administrators"/> 
     <deny users="*"/> 
    </authorization> 
</system.Web> 

Sau đó, bạn sẽ phải tắt quyền truy cập vô danh vào điểm cuối của bạn trong IIS và thay vào đó bật Xác thực tích hợp Windows.
Trong bảng điều khiển quản lý IIS, bạn thực hiện việc đó bằng cách hiển thị hộp thoại 'Properties' cho thư mục ảo của bạn. Sau đó, bạn sẽ tìm thấy cài đặt bảo mật trong tab 'Bảo mật thư mục'.

Tất nhiên, kênh liên lạc duy nhất có sẵn sẽ là HTTP. Khách hàng sẽ phải cung cấp danh tính Windows của họ trong yêu cầu tại vận chuyển cấp với các thiết lập này:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WindowsSecurity"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://localhost/myservice" 
        binding="wsHttpBinding" 
        bindingConfiguration="WindowsSecurity" 
        contract="IMyService" /> 
    </client> 
</system.serviceModel> 

Lưu ý rằng nếu điểm cuối dịch vụ của bạn sử dụng wsHttpBinding sau đó bạn cũng sẽ phải bổ sung SSL để endpoint của bạn vì đó là một yêu cầu được WCF thi hành khi bạn sử dụng bảo mật mức vận tải.
Nếu bạn thay vì đi cho basicHttpBinding, bạn sau đó có thể sử dụng một kém an toàn chế độ xác thực có sẵn trong WCF gọi TransportCredentialOnly, nơi SSL không còn cần thiết.

Để biết thêm thông tin chi tiết, here là tổng quan tốt về cơ sở hạ tầng bảo mật trong WCF.

+3

Xin lưu ý rằng nếu bạn muốn thực hiện việc này, bạn cần bật chế độ tương thích ASP.NET trong tệp web.config của mình. Nếu không, nó sẽ không hoạt động (và sẽ không ném một lỗi nào cả). – Rocklan

+0

Lưu ý: để làm việc này, system.web/roleManager/@enabled phải là false, hoặc bị bỏ qua, nếu không các role sẽ là IIS .Net Roles, chứ không phải các nhóm Windows. – Polyfun

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