28

Abbiamo difficoltà a capire come funzionano queste credenziali. In effetti, potrebbero non funzionare come ci aspettavamo che funzionassero. Ecco una spiegazione del problema attuale.Utilizzo di DefaultCredentials e DefaultNetworkCredentials

Abbiamo 2 server che devono comunicare tra loro tramite i servizi web. Il primo (chiamiamolo Server01) ha un servizio di Windows in esecuzione come account NetworkService. L'altro Server02 ha ReportingServices in esecuzione con IIS 6.0. Il servizio Windows su Server01 sta tentando di utilizzare il servizio Web ReportingServices Server02 per generare report e inviarli tramite e-mail.

Quindi, ecco cosa abbiamo provato finora.

Impostazione delle credenziali in fase di esecuzione (Questo funziona perfettamente bene):

rs.Credentials = new NetworkCredentials("user", "pass", "domain"); 

Ora, se potessimo utilizzare un utente generico tutto sarebbe andato bene, ma ... non siamo autorizzati a. Quindi, stiamo cercando di utilizzare i DefaultCredetials o DefaultNetworkCredentials e passarlo al RS Webservice:

rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials 

Oppure:

rs.Credentials = System.Net.CredentialCache.DefaultCredentials 

In entrambi i casi non funzionerà. Riceviamo sempre 401 Unuthrorized da IIS. Ora, quello che sappiamo è che se vogliamo dare accesso a una risorsa registrata come NetworkService, dobbiamo concederlo a DOMAIN\MachineName$ (http://msdn.microsoft.com/en-us/library/ms998320.aspx):

concedere l'accesso a un server SQL remoto

Se si sta accedendo a un database su un altro server nello stesso dominio (o in un dominio trusted), le credenziali di rete dell'account del servizio di rete vengono utilizzate per l'autenticazione nel database. Le credenziali dell'account del servizio di rete sono di tipo DomainName \ AspNetServer $, dove DomainName è il dominio del server ASP.NET e AspNetServer è il nome del server Web.

Ad esempio, se l'applicazione ASP.NET viene eseguita su un server denominato SVR1 nel dominio CONTOSO, SQL Server visualizza una richiesta di accesso al database da CONTOSO \ SVR1 $.

Abbiamo presupposto che garantire l'accesso allo stesso modo con IIS avrebbe funzionato. Tuttavia, non è così. O almeno, qualcosa non è impostato correttamente per farlo autenticare correttamente.

Quindi, ecco alcune domande:

  1. Abbiamo letto su "Utenti che impersona" da qualche parte, abbiamo bisogno di impostare questo da qualche parte nel Windows Servizi?

  2. È possibile concedere l'accesso all'account integrato NetworkService a un server IIS remoto?

Grazie per la lettura!

risposta

8

Tutti i dettagli necessari sono inclusi in questo vecchio articolo,

http://msdn.microsoft.com/en-us/library/ms998351.aspx

In breve, quando a trovarlo fonte di confusione per risolvere i problemi come questo, si dovrebbe prima rivedere i dettagli tecnici dietro ASP.NET imitazione con attenzione.

+0

Link eccellente: D – omglolbah

+1

Sarebbe stato bello scrivere la risposta effettiva alla domanda in poche parole (se possibile), invece di inserire il collegamento all'articolo di lettura di 2 ore nel MSDN e incolpare gli altri di non aver letto it :) –

+0

@ d.popov Per me è davvero una sfida riassumere le cose principali. Puoi provare te stesso se ti interessa. Devo dire che la risposta effettiva alla domanda non sarà più breve di quell'articolo. –

0

Ecco alcune cose che è possibile verificare: - impostare un SPN (Nome principale servizio) per il servizio di segnalazione; puoi trovare buoni esempi in google; - consentire la delega (ClientCredentials.Windows.AllowImpersonationLevel)

0

è il problema che si sta non riuscendo per l'autenticazione di IIS o, in mancanza di autenticare a SSRS? Potrebbe essere necessario autorizzare l'account DOMAIN \ MachineName $ in SSRS per eseguire il report che si sta tentando di automatizzare.

SSRS di solito fa un buon lavoro nel far sì che IIS sia configurato correttamente, quindi non è necessario fare confusione con quelle impostazioni. Ho ricontrollato la mia installazione (che è SSRS 2005, le cose potrebbero aver funzionato in modo diverso in SSRS 2000 e non hai detto quale versione stai utilizzando), ed è impostata per utilizzare l'autenticazione di Windows e ha la rappresentazione abilitata. Ciò significa che IIS dovrebbe fondamentalmente solo autenticare le tue credenziali (convalidare un nome utente/password corretto), non autorizzare (determinare se quell'utente ha il permesso di eseguire il rapporto in questione). Quindi IIS passa le credenziali a SSRS, che ha le proprie impostazioni per determinare quali account hanno l'autorizzazione per visualizzare i report.

Inoltre, è possibile automatizzare l'invio di report su base pianificata direttamente in SSRS, quindi potrebbe non essere necessario il servizio di Windows se la pianificazione è abbastanza semplice (ad esempio, giornaliera, settimanale, ecc.).