Inloggen
 
 
 
 
    
Reporting Services 2005 with ASP.NET forms authentication
Location: BlogsFerry Onderwater - Developer    
Posted by: Ferry Onderwater 26-3-2006 0:00

Zo werkte het goed, zo stopte het ermee en kregen we een 401 error, forbidden. En toen begon de zoektocht naar authenticatie voor de reportviewer.

Reporting Services 2005 with ASP.NET forms authentication

Wat we willen is een applicatie met form-authentication. We houden zelf de useraccounts bij in de database. Om rapportages weer te geven willen we gebruik maken van Reporting Services 2005. Zowel de applicatie als de database als reporting services draaien op dezelfde server. We willen echter als 'UserX' de reporting server benaderen, terwijl de applicatie onder 'Network Service' draait (DefaultAppPool) en we via Forms-authentication ingelogd zijn op onze applicatie. Hoe doen we dat?

Uiteindelijk blijkt dat de enige manier om credentials aan de reportviewer mee te geven een implementatie van IReportServerCredentials is. Zoeken op het internet levert een aantal voorbeelden in C# op, maar geen enkele in VB.NET. Na wat stoeien kom ik op deze implementatie:

Code:
Imports Microsoft.Reporting.Webforms
Imports System.Security.Principal
Imports System.Net
Public Class myReportServerCredentials
    Implements IReportServerCredentials
    Private mAuthCookie As Cookie
    Private _UserName As String
    Private _Password As String
    Private _Domain As String
    Public Sub New(ByVal UserName As String, _ 
                   ByVal Password As String, _
                   ByVal Domain As String)
        _UserName = UserName
        _Password = Password
        _Domain = Domain
    End Sub
    Public ReadOnly Property ImpersonationUser() As WindowsIdentity 
    Implements IReportServerCredentials.ImpersonationUser
        Get
            Return Nothing
        End Get
    End Property
    ReadOnly Property NetworkCredentials() As ICredentials _
    Implements IReportServerCredentials.NetworkCredentials
        Get
            Return New System.Net.NetworkCredential(_UserName, _Password, _Domain)
        End Get
    End Property
    Function GetFormsCredentials(ByRef authCookie As Cookie, _
                                 ByRef user As String, _
                                 ByRef password As String, _
                                 ByRef authority As String) As Boolean _
    Implements IReportServerCredentials.GetFormsCredentials
        authCookie = Nothing
        user = Nothing
        password = Nothing
        Return False
    End Function
End Class

Om deze class aan te roepen en te gebruiken binnen de reportviewer control gebruik ik de volgende code:

rv.ServerReport.ReportServerCredentials = New myReportServerCredentials("UserX", "password", "Domein").

Nog steeds krijg ik een 401-error. Dit komt omdat de virtual directory 'ReportServer' standaard ingesteld staat op 'Integrated security'. Door deze op 'basic' te zetten draait de reportviewer weer goed en wordt de virtual directory benaderd als UserX. 

Copyright ©2006 Ferry Onderwater
Permalink |  Trackback
  
 
Weblogs
    
Archief
    
Zoeken
    
 
 
 
 
Copyright 2006-2009 by Arcencus
Privacy Statement | Terms Of Use