2012-06-25 14 views
24

* 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

folge
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

+0

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. –

+0

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

+0

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. –

Antwort

4

Aus der Fehlermeldung scheint es, dass der Authentifizierungsfehler beim Rendern der Benutzeroberfläche des Berichts-Managers auftritt. Wechseln Sie in den Ordner C: \ Programme \ Microsoft SQL Server \ MSRS11.MSSQLSERVER \ Reporting Services \ ReportManager \, und ermitteln Sie die Datei web.config, und wenden Sie die folgenden Änderungen an.

<authentication mode="None" /> 
<identity impersonate="false" />, and the entry for the httpmodule 
Verwandte Themen