* Die Details der Umgebung werden unten beschrieben.Weiterleiten der grundlegenden Authentifizierungsanforderung an die Berichtsmanager-URL
Ich versuche eine Authentifizierungslösung für Reporting Services zu erstellen.
Online-Kunden sollten mit unserer bestehenden Kundendatenbank authentifiziert werden, während lokale Verwaltungsbenutzer eine einfache, grundlegende Authentifizierung verwenden können.
ich eine Sicherheitserweiterung SSRS
gemacht haben die Codeplex Beispiele und die Art und Weise ich mit der grundlegenden Herausforderung zur Ausgabe verwenden ist als
public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId)
{
if (HttpContext.Current != null && HttpContext.Current.User != null)
userIdentity = HttpContext.Current.User.Identity;
else
{
HttpContext.Current.Response
.AddHeader("WWW-Authenticate", "Basic realm=\"ReportServer\"");
HttpContext.Current.Response.Status = "401 Unauthorized";
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
userIdentity = new GenericIdentity("not authorized");
}
userId = IntPtr.Zero;
}
auf diese Weise folgt, wenn ein Benutzer, der nicht durch die LogonUser
Verfahren bestanden haben (dh direkter URL-Zugriff, Gebotsbericht-Bereitstellung, nicht die regulären Benutzer-Apps) wird mit einem Popup für die grundlegende Anmeldung/Passwort konfrontiert. Um dies zu unterstützen ich ein Httpmodule gemacht wie
void IHttpModule.Init(HttpApplication context)
{
context.AuthenticateRequest += CustomAuthenticateRequest;
}
void CustomAuthenticateRequest(object sender, EventArgs e)
{
var app = sender as HttpApplication;
if (app == null) return;
var basicAuth = app.Context.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(basicAuth))
{
var loginpass = Encoding.Default.GetString(
Convert.FromBase64String(basicAuth.Replace("Basic ", ""))).Split(':');
if (loginpass.Length == 2
&& loginpass[0] == adminUser
&& loginpass[1] == adminPass)
{
app.Context.User = new GenericPrincipal(
new GenericIdentity(adminUser), null);
}
}
}
Dies funktioniert gut, wenn /ReportServer
URL zugreifen, ich herausgefordert, geben Sie die fest codierte Admin-Login/Pass und erhält angemeldet.
Das Problem ist, wenn /Reports
Zugriff ich
System.Net.WebException: Die Anforderung mit HTTP-Status 401 fehlgeschlagen: Unerlaubte
Ich möchte wissen, wie kann ich den Pass login/pass challenge den ganzen weg runter zu /Reports
Ich führe SqlServer 2012 zusammen mit Reporting Servi ces 2012, aber das Innenleben nicht von SSRS 2008-R2
In meinem web.config
Ich habe
<authentication mode="None" />
<identity impersonate="false" />, and the entry for the httpmodule
Auf rssrvpolicy.config
änderte sich die Codegruppe für meine Httpmodule mit Fulltrust ist
Auf rsreportserver.config
Ich habe
<AuthenticationTypes>
<Custom/>
</AuthenticationTypes>, and the entry for the security extension
Ich habe SSL
konfiguriert, noch nicht, und die Bindungen sind bei der ir default
Ich würde immer noch eine Antwort lieben, aber jetzt habe ich eine Ausweichlösung gemacht. Auf meinem HttpModule erlaube ich nur den Zugang zum Report Manager über den lokalen Rechnerzugriff. Wenn ich vom lokalen Rechner aus zugreife, setze ich einfach den Kontextbenutzer als admin. Eine schrecklich hässliche Lösung, aber dennoch eine Lösung. –
ReportManager kommuniziert mit ReportServer unter Verwendung derselben öffentlichen SOAP-API, sodass es sich irgendwie authentifizieren muss. Ich denke, dass Sie das gleiche Modul in ReportManager-Konfigurationsdateien hinzufügen müssen. Ich hoffe, dass ReportManager dann dasselbe Authentifizierungs-Cookie oder dieselben Anmeldeinformationen verwendet, um mit ReportServer zu kommunizieren. – user1578107
Benutzerdefinierte Sicherheit ist möglich. Wenn Sie die Authentifizierungs- und Autorisierungsmethoden auf der SSRS-Serviceebene überschreiben, müssen Sie nur die Funktionen mit dem ssrs-Manager integrieren und eine Standardanmeldeseite bereitstellen. –