6

Ok, tôi đã dành khoảng 15 giờ để giải quyết vấn đề này và cuối cùng tôi đã từ chức để đăng bài ở đây để cố gắng giải quyết vấn đề. Tôi biết bài viết này là rất dài nhưng tôi đã làm tất cả những điều bình thường mà tôi sẽ được nói để cố gắng vì vậy tôi muốn chắc chắn rằng nó là rõ ràng vì vậy chúng tôi không lãng phí thời gian vào đó.SharePoint 2013/IIS 7.5 Mạo danh/Ủy nhiệm/Double Hop

Tôi có máy ảo Win Server 2008 R2 được lưu trữ trên máy chủ ESXi 5.0. Trên máy chủ này tôi đã cài đặt SharePoint Foundation 2013 Preview cũng như tất cả các yêu cầu trước vv Tôi đang chạy mọi thứ trên một máy chủ (MSSQL, IIS 7.5, dịch vụ SharePoint) vì chúng tôi sẽ sử dụng rất hạn chế và chỉ có khoảng 30 người dùng. Một điều tôi rất cần thiết để thêm vào SharePoint là khả năng cho người dùng sửa đổi thông tin của họ trong Active Directory (Server 2003) vì AD của chúng ta hầu như không được phổ biến và đã lỗi thời. Tôi đã tìm thấy một WebPart hoàn hảo và nó hoạt động tuyệt vời để chỉnh sửa người dùng.

Sự cố xảy ra khi tôi muốn định cấu hình WebPart để cho phép người dùng chỉ chỉnh sửa bản thân. WebPart (đúng) sử dụng dòng mã này trong C# .NET :. để có được danh tính hiện đã đăng nhập đã được xác thực bằng Xác thực Windows trong IIS. Thay vào đó, điều này sẽ trả về người dùng cục bộ NT AUTHORITY/IUSR. (Tôi biết đây không phải là tin tức cho bất cứ ai).

System.Security.Principal.WindowsIdentity.GetCurrent().Name;

Vì vậy, tôi bắt đầu nghiên cứu của tôi và làm cho chắc chắn về những điều sau đây.

Trong web.config của tôi cho SharePoint, tôi đã điều sau đây:

<authentication mode="Windows" /> <identity impersonate="true" />

Trong IIS, tôi có thiết lập thẩm định sau đây cho trang web IIS mà nhà cài đặt SharePoint của tôi:

Anonymous Authentication Disabled 
ASP.NET Impersonation  Enabled 
Basic Authentication  Disabled HTTP 401 Challenge 
Digest Authentication  Disabled HTTP 401 Challenge 
Forms Authentication  Disabled HTTP 302 Login/Redirect 
Windows Authentication  Enabled  HTTP 401 Challenge 

Vì vậy, tôi biết trang web vẫn đang đăng nhập với người dùng ẩn danh mặc dù tôi đã tắt xác thực ẩn danh. Tôi đã xem qua thông tin về vấn đề double-hop phù hợp với vấn đề của tôi và tôi đi qua liên kết này và làm theo tất cả các hướng dẫn trong bài đăng này: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx. Sau mỗi bước, tôi đã kiểm tra mọi thay đổi về hành vi của ứng dụng nhưng không bao giờ tìm thấy bất kỳ hành vi nào.

Nói tóm lại tôi đã làm như sau:

  1. tôi thiết lập một tài khoản người dùng miền để chạy các hồ bơi ứng dụng. Để thử nghiệm, tôi đã làm cho người dùng này trở thành thành viên của nhóm Quản trị viên miền.
  2. Tôi đã thay đổi một dòng trong web.config thành <add key="aspnet:AllowAnonymousImpersonation" value="false" /> (đó là sự thật). Điều này ngăn cản người dùng NT AUTHORITY \ IUSR chạy ứng dụng và thay vào đó nó chạy trong tài khoản miền mà tôi đã tạo để chạy pool ứng dụng. Bây giờ tôi có thể đăng nhập vào SharePoint và truy cập vào WebPart của tôi, tuy nhiên như mong đợi, nó trình bày cho tôi thông tin AD cho người dùng miền đang chạy App Pool, thay vì người dùng miền đã xác thực. Vì vậy, tôi biết WebPart đang hoạt động và có các quyền cần thiết, nhưng System.Security.Principal.WindowsIdentity.GetCurrent().Name; vẫn trả về người dùng đang chạy ứng dụng nhóm tức là.mạo danh vẫn không hoạt động
  3. Trong người dùng và máy tính AD, tôi đã cấp Trust this computer for delegation to any service cho máy chủ ảo mà tất cả điều này đều chạy.
  4. Vì tôi không có tab "Ủy quyền" cho tài khoản người dùng miền đang chạy hồ bơi ứng dụng, tôi phải đăng ký SPN cho người dùng. Sau khi đăng ký tất cả SPN tôi đã sao chép từ danh sách SPN của máy chủ và cũng có một vài SPN mà tôi tìm thấy trực tuyến, và cũng thiết lập Trust this user for delegation to any service trên người dùng, không có thay đổi nào về hành vi của ứng dụng.
  5. Tôi đảm bảo rằng người dùng tên miền tôi đã đăng nhập không được bảo vệ khỏi ủy quyền
  6. Tôi đã chuyển sang trình chỉnh sửa chính sách cục bộ trên máy chủ SharePoint và tôi đảm bảo rằng người dùng miền đang chạy ứng dụng được phép "Làm như một phần của hệ điều hành "và" Mạo danh một khách hàng sau khi xác thực ".
  7. Những điều khác tôi đã cố gắng
    • Thêm Negotiate:Kerberos như một nhà cung cấp chứng thực cho Windows Auth trên trang web IIS
    • xác nhận sự hiện diện của hai dòng sau trong SharePoint web.config:

Dưới đây là hồ sơ SPN của tôi trên DC:

setspn -l SPserver 
Registered ServicePrincipalNames for CN=SPserver,CN=Computers,DC=DOMAIN,DC=local: 
    MSSQLSvc/SPserver.DOMAIN.local:appPoolUser 
    WSMAN/SPserver 
    WSMAN/SPserver.DOMAIN.local 
    TERMSRV/SPserver 
    TERMSRV/SPserver.DOMAIN.local 
    RestrictedKrbHost/SPserver 
    HOST/SPserver 
    RestrictedKrbHost/SPserver.DOMAIN.local 
    HOST/SPserver.DOMAIN.local 



setspn -l appPoolUser 
Registered ServicePrincipalNames for CN=appPoolUser,OU=Utility,OU=Users,OU=Company Name,DC=DOMAIN,DC=local: 
    http/subdomain.domain.com 
    http/SPserver.DOMAIN.local 
    RestrictedKrbHost/appPoolUser.DOMAIN.local 
    RestrictedKrbHost/appPoolUser 
    MSSQLSvc/appPoolUser.DOMAIN.local:appPoolUser 
    HOST/appPoolUser 
    HOST/appPoolUser.DOMAIN.local 

Tôi khởi động lại máy chủ và IIS một vài lần trong suốt quá trình này. Tuy nhiên khi tôi đăng nhập, Phần Web của tôi xác định tôi là người dùng đang chạy hồ bơi ứng dụng. Tôi biết có những công việc xung quanh như sử dụng một hồ bơi ứng dụng chế độ cổ điển nhưng đó là không được chấp nhận. Có nhiều cách khác để có được tên chính xác trong .NET nhưng tôi không muốn phải thay đổi Phần Web và quan trọng hơn, đây là cách chính xác để làm điều đó và tôi sẽ có thể làm cho nó hoạt động. Tôi không muốn phải liên tục làm việc xung quanh nó.

Nếu có ai có thêm ý tưởng về những gì có thể gây ra sự cố, tôi rất muốn nghe chúng.

+0

Tôi chỉ muốn cập nhật bài đăng này. Tôi vẫn chưa tìm thấy một giải pháp và nó không có vẻ như bất cứ điều gì đã rung chuông cho bất cứ ai khác. Trong thời gian đó, tôi đã thay đổi mã trong phần Web để có được người dùng như thế này: 'SPSite site = new SPSite (SPContext.Current.Web.Url.ToString());' 'SPWeb web = site .OpenWeb ("/"); ' ' SPUser user = web.CurrentUser; ' – user456151

Trả lời