2012-10-04 33 views
5

Mam obecnie kilka problemów z korzystaniem z usługi SSRS. Mam witrynę ASP.NET, która korzysta z uwierzytelniania systemu Windows. To działa dobrze i wiem, że strona internetowa bieżącego użytkownika jest aktualnie zalogowanym użytkownikiem.Uwierzytelnianie systemu Windows za pomocą usługi SSRS ASP.NET ReportViewer i usługi WWW

Na tej stronie znajduje się formularz Report Viewer. Działa to dobrze, gdy nie ustawiam referencji. Jednak patrząc na protokół wykonania raportów w SQL Server, nazwa użytkownika jest wymieniona jako DOMAIN \ MACHINE.

Próbowałem ustawiać właściwość ReportServerCredentials do klasy jak poniżej:

[Serializable] 
public class ReportCredentials : IReportServerCredentials 
{ 

    public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority) 
{ 
    authCookie = null; 
    userName = null; 
    password = null; 
    authority = null; 

    return false; 
} 

public WindowsIdentity ImpersonationUser 
{ 
    get { 
     return (WindowsIdentity)HttpContext.Current.User.Identity; 
    } 
} 

public ICredentials NetworkCredentials 
{ 
    get { 
     return null; 
    } 
} 

}

Jednak, gdy ten kod wykonuje teraz otrzymać 401 powrotem z usługi internetowej i sprawozdania usługa.

Co się dzieje? Oboje znajdują się w tej samej domenie. Chcę użyć bieżącego użytkownika, a nie bieżącego komputera. Jeśli uruchomię raport na serwerze raportów, wyświetli się pod prawidłową nazwą użytkownika, ale nie z mojej strony.

Odpowiedz

0

Zamiast

return (WindowsIdentity)HttpContext.Current.User.Identity; 

Można spróbować

return WindowsIdentity.GetCurrent(); 
+0

Yeh Próbowałem to pierwszy, ale wciąż mam 401 :( – Lloyd

+0

Właściwie kłamać, musi być buforowane. Raport działa teraz, ale nazwa jest rejestrowana jako \t PERSONEL \ UKBRISDDWRKA424 $ co jest maszyna. Grrr. – Lloyd

4

miałem własne problemy tutaj, ale ostatecznie był udany.

Maszyna 1: przeglądarka klienta

Maszyna 2: serwer WWW

Maszyna 3: SSRS + SQL Server

Aby rozwiązać podwójne hop miałem kolej dział IT o delegacji Active Directory dla machine2, ustawienie "Ufaj temu komputerowi w delegowaniu do dowolnej usługi (tylko Kerberos)".

Na moim serwerze internetowym I zmodyfikowany plik Web.config mieć:

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

Na serwerze SSRS I zmodyfikowanego pliku RSReportServer.config, dodając <RSWindowsNegotiate/> do sekcji <AuthenticationTypes>. Domyślna wartość to <RSWindowsNTLM/>. Właśnie opuścił zarówno tam, dając mi:

ja ponownie uruchomić serwer SSRS i wszystko zaczęło działać.

Mam nadzieję, że to pomoże komuś!

Powiązane problemy