Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Authentifizierung ist der Prozess der Einrichtung des Rechts eines Benutzers auf eine Identität. Es gibt viele Techniken, mit denen Sie einen Benutzer authentifizieren können. Die am häufigsten verwendete Methode besteht darin, Kennwörter zu verwenden. Wenn Sie beispielsweise die Formularauthentifizierung implementieren, möchten Sie eine Implementierung, die Benutzer nach Anmeldeinformationen fragt (in der Regel durch eine Schnittstelle, die einen Anmeldenamen und ein Kennwort anfordert) und dann Benutzer anhand eines Datenspeichers überprüft, z. B. eine Datenbanktabelle oder Konfigurationsdatei. Wenn die Anmeldeinformationen nicht überprüft werden können, schlägt der Authentifizierungsprozess fehl, und der Benutzer geht von einer anonymen Identität aus.
Benutzerdefinierte Authentifizierung in Reporting Services
In Reporting Services verarbeitet das Windows-Betriebssystem die Authentifizierung von Benutzern entweder über integrierte Sicherheit oder über die explizite Aufnahme und Validierung von Benutzeranmeldeinformationen. Benutzerdefinierte Authentifizierung kann in Reporting Services entwickelt werden, um zusätzliche Authentifizierungsschemas zu unterstützen. Dies wird über die Sicherheitserweiterungsschnittstelle IAuthenticationExtensionermöglicht. Alle Erweiterungen erben von der IExtension Basisschnittstelle für alle vom Berichtsserver bereitgestellten und verwendeten Erweiterungen. IExtensionsowie IAuthenticationExtensionMember des Microsoft.ReportingServices.Interfaces Namespaces.
Die primäre Möglichkeit, sich bei einem Berichtsserver in Reporting Services zu authentifizieren, ist die LogonUser Methode. Dieses Mitglied des Reporting Services-Webdiensts kann verwendet werden, um Benutzeranmeldeinformationen zur Überprüfung an einen Berichtsserver zu übergeben. Ihre zugrunde liegende Sicherheitserweiterung implementiert IAuthenticationExtension.LogonUser , die Ihren benutzerdefinierten Authentifizierungscode enthält. Im Beispiel für die Formularauthentifizierung führt LogonUser eine Authentifizierungsprüfung mit den angegebenen Anmeldeinformationen und einem benutzerdefinierten Benutzerspeicher in einer Datenbank durch. Ein Beispiel für eine Implementierung von LogonUser sieht wie folgt aus:
public bool LogonUser(string userName, string password, string authority)
{
return AuthenticationUtilities.VerifyPassword(userName, password);
}
Die folgende Beispielfunktion wird verwendet, um die angegebenen Anmeldeinformationen zu überprüfen:
internal static bool VerifyPassword(string suppliedUserName,
string suppliedPassword)
{
bool passwordMatch = false;
// Get the salt and pwd from the database based on the user name.
// See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:
// Use DPAPI (User Store) from Enterprise Services," and "How To:
// Create a DPAPI Library" for more information about how to use
// DPAPI to securely store connection strings.
SqlConnection conn = new SqlConnection(
"Server=localhost;" +
"Integrated Security=SSPI;" +
"database=UserAccounts");
SqlCommand cmd = new SqlCommand("LookupUser", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter sqlParam = cmd.Parameters.Add("@userName",
SqlDbType.VarChar,
255);
sqlParam.Value = suppliedUserName;
try
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
reader.Read(); // Advance to the one and only row
// Return output parameters from returned data stream
string dbPasswordHash = reader.GetString(0);
string salt = reader.GetString(1);
reader.Close();
// Now take the salt and the password entered by the user
// and concatenate them together.
string passwordAndSalt = String.Concat(suppliedPassword, salt);
// Now hash them
string hashedPasswordAndSalt =
FormsAuthentication.HashPasswordForStoringInConfigFile(
passwordAndSalt,
"SHA1");
// Now verify them. Returns true if they are equal.
passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);
}
catch (Exception ex)
{
throw new Exception("Exception verifying password. " +
ex.Message);
}
finally
{
conn.Close();
}
return passwordMatch;
}
Authentifizierungsablauf
Der Reporting Services-Webdienst stellt benutzerdefinierte Authentifizierungserweiterungen bereit, um die Formularauthentifizierung durch Berichts-Manager und den Berichtsserver zu aktivieren.
Die LogonUser Methode des Reporting Services-Webdiensts wird verwendet, um Anmeldeinformationen für die Authentifizierung an den Berichtsserver zu senden. Der Webdienst verwendet HTTP-Header, um ein Authentifizierungsticket (als "Cookie" bezeichnet) vom Server an den Client zu übergeben, um überprüfte Anmeldeanforderungen zu erhalten.
Die folgende Abbildung zeigt die Methode der Authentifizierung von Benutzern an den Webdienst, wenn Ihre Anwendung mit einem Berichtsserver bereitgestellt wird, der für die Verwendung einer benutzerdefinierten Authentifizierungserweiterung konfiguriert ist.
Wie in Abbildung 2 dargestellt, lautet der Authentifizierungsprozess wie folgt:
Eine Clientanwendung ruft die Webdienstmethode LogonUser auf, um einen Benutzer zu authentifizieren.
Der Webdienst ruft die LogonUser Methode Ihrer Sicherheitserweiterung auf, insbesondere die Klasse, die IAuthenticationExtension implementiert.
Ihre Implementierung überprüft LogonUser den Benutzernamen und das Kennwort im Benutzerspeicher oder in der Sicherheitsautorität.
Nach erfolgreicher Authentifizierung erstellt der Webdienst ein Cookie und verwaltet es für die Sitzung.
Der Webdienst gibt das Authentifizierungsticket an die aufrufende Anwendung im HTTP-Header zurück.
Wenn der Webdienst einen Benutzer erfolgreich über die Sicherheitserweiterung authentifiziert, generiert er ein Cookie, das für nachfolgende Anforderungen verwendet wird. Das Cookie kann nicht innerhalb der benutzerdefinierten Sicherheitsbehörde bestehen, da der Berichtsserver nicht der Besitzer der Sicherheitsbehörde ist. Das Cookie wird von der LogonUser Webdienstmethode zurückgegeben und in nachfolgenden Webdienstmethodenaufrufen und im URL-Zugriff verwendet.
Hinweis
Um zu vermeiden, dass der Cookie während der Übertragung beeinträchtigt wird, sollten von LogonUser der Übermittlung zurückgegebene Authentifizierungscookies sicher mit SSL-Verschlüsselung (Secure Sockets Layer) übertragen werden.
Wenn Sie über URL-Zugriff auf den Berichtsserver zugreifen, wenn eine benutzerdefinierte Sicherheitserweiterung installiert ist, verwalten Internetinformationsdienste (INTERNET Information Services, IIS) und ASP.NET die Übertragung des Authentifizierungstickets automatisch. Wenn Sie über die SOAP-API auf den Berichtsserver zugreifen, muss Ihre Implementierung der Proxyklasse zusätzliche Unterstützung für die Verwaltung des Authentifizierungstickets enthalten. Weitere Informationen zur Verwendung der SOAP-API und zum Verwalten des Authentifizierungstickets finden Sie unter "Verwenden des Webdiensts mit benutzerdefinierter Sicherheit".
Formularauthentifizierung
Die Formularauthentifizierung ist eine Art von ASP.NET Authentifizierung, bei der ein nicht authentifizierter Benutzer an ein HTML-Formular weitergeleitet wird. Sobald der Benutzer Anmeldeinformationen bereitstellt, gibt das System ein Cookie aus, das ein Authentifizierungsticket enthält. Bei späteren Anforderungen überprüft das System zunächst das Cookie, um festzustellen, ob der Benutzer bereits vom Berichtsserver authentifiziert wurde.
Reporting Services kann erweitert werden, um die Formularauthentifizierung mithilfe der Sicherheitserweiterungsschnittstellen zu unterstützen, die über die Reporting Services-API verfügbar sind. Wenn Sie Reporting Services auf die Verwendung der Formularauthentifizierung erweitern, verwenden Sie Secure Sockets Layer (SSL) für alle Kommunikationen mit dem Berichtsserver, um zu verhindern, dass böswillige Benutzer Zugriff auf das Cookie eines anderen Benutzers erhalten. SSL ermöglicht Clients und einem Berichtsserver, sich gegenseitig zu authentifizieren und sicherzustellen, dass keine anderen Computer den Inhalt der Kommunikation zwischen den beiden Computern lesen können. Alle Daten, die über eine SSL-Verbindung von einem Client gesendet werden, werden verschlüsselt, sodass böswillige Benutzer keine Kennwörter oder Daten abfangen können, die an einen Berichtsserver gesendet werden.
Die Formularauthentifizierung wird in der Regel implementiert, um Konten und Authentifizierung für andere Plattformen als Windows zu unterstützen. Ein grafisches Interface wird einem Benutzer angezeigt, der zugriff auf einen Berichtsserver anfordert, und die angegebenen Anmeldeinformationen werden an eine Sicherheitsautorität für die Authentifizierung übermittelt.
Für die Formularauthentifizierung muss eine Person vorhanden sein, um Anmeldeinformationen einzugeben. Bei unbeaufsichtigten Anwendungen, die direkt mit dem Reporting Services-Webdienst kommunizieren, muss die Formularauthentifizierung mit einem benutzerdefinierten Authentifizierungsschema kombiniert werden.
Die Formularauthentifizierung ist für Reporting Services geeignet, wenn:
Sie müssen Benutzer speichern und authentifizieren, die nicht über Microsoft Windows-Konten verfügen, und
Sie müssen Ein eigenes Benutzeroberflächenformular als Anmeldeseite zwischen verschiedenen Seiten auf einer Website bereitstellen.
Beachten Sie Folgendes beim Schreiben einer benutzerdefinierten Sicherheitserweiterung, die die Formularauthentifizierung unterstützt:
Wenn Sie die Formularauthentifizierung verwenden, muss der anonyme Zugriff im virtuellen Verzeichnis des Berichtsservers in Internetinformationsdienste (IIS) aktiviert sein.
ASP.NET Authentifizierung muss auf Formulare festgelegt werden. Sie konfigurieren ASP.NET Authentifizierung in der Web.config Datei für den Berichtsserver.
Reporting Services kann Benutzer entweder mit der Windows-Authentifizierung oder der benutzerdefinierten Authentifizierung authentifizieren und autorisieren, aber nicht beides. Reporting Services unterstützt nicht die gleichzeitige Verwendung mehrerer Sicherheitserweiterungen.