【SSRS】Reporting Services Forms Authentication ( SSRS 表單驗證 )

【SSRS】Reporting Services Forms Authentication ( SSRS 表單驗證 )
這幾天在測試這件事情,我在Asp.net MVC的網站中,要看某些報表需要把使用者導向到SSRS中,但SSRS是吃Windows 的驗證,在這狀態上使用者需要做二次驗證,對使用者的操作體驗上的確是一個好的體驗吧?(這答案應該是肯定的)幸虧SSRS可以自己做網站的驗證模式,而本篇的範例就使用Form表單的驗證模式來說明吧!(當然不只有Form表單的方式,另外還有ADFS的方式)
元件建立
首先,我們需要先到這裡,下載本篇所需要的程式碼(此為安裝黨,內含所需的程式碼)

下載網站上雖寫 2008R2的版本,但小弟測試上仍然可在2012上執行!
Step2
安裝剛剛所下載的檔案,預設的路徑會在SQL的目錄下,並且開啟安裝路徑中的\Reporting Services\Extension Samples\FormsAuthentication Sample 開啟後上面會有VB以及C#的專案黨,您可以依照自

這幾天在測試這件事情,我在Asp.net MVC的網站中,要看某些報表需要把使用者導向到SSRS中,但SSRS是吃Windows 的驗證,在這狀態上使用者需要做二次驗證,對使用者的操作體驗上的確是一個好的體驗吧?(這答案應該是肯定的)幸虧SSRS可以自己做網站的驗證模式,而本篇的範例就使用Form表單的驗證模式來說明吧!(當然不只有Form表單的方式,另外還有ADFS的方式)

 

元件建立

首先,我們需要先到這裡,下載本篇所需要的程式碼(此為安裝黨,內含所需的程式碼)

下載網站上雖寫 2008R2的版本,但小弟測試上仍然可在2012上執行!

Step2

安裝剛剛所下載的檔案,預設的路徑會在SQL的目錄下,並且開啟安裝路徑中的\Reporting Services\Extension Samples\FormsAuthentication Sample  開啟後上面會有VB以及C#的專案黨,您可以依照自己熟悉的語言來更改,剛開啟專案時會產生一個警號,原因是缺少了Microsoft.ReportingServices.Interfaces參考dll檔案,這時候我們對著參考的節點點選右鍵加入參考,點選瀏覽到<ReportingService>/ReportServer/bin中尋找這支dll檔案,加入後就會看到警告的圖示消失

專案安裝的預設目錄:C:\Program Files\Microsoft SQL Server\100\Samples

image

Step3

開啟AuthenticationExtension.cs 與 AuthenticationUtilities.cs這兩個檔案,並且將文件中的localhost連接字串改為<ServerName>\InstanceName

PS:RS_的前置詞是必須的

        取代後您需要在字串前加上"@"的符號或是使用連續的"\\"  ,因為在C#的"\"具有特殊的意義

Step4

開啟AuthenticationUtilities.cs,取代MSReportServer_Instance這個字串為<reportserver instance name>

 

Step5

開啟AuthenticationUtilities.cs,尋找wmiNamespace字串內容中的{0}更改為<report server instance name>,並且將V10改為V11(SQL Server2012的版本號),更改後的長相會像似這樣@"\root\Microsoft\SqlServer\ReportServer\RS_<instancename>\v11"

 

Step6

在上述步驟更改後,建置方案時需要一個密鑰文件,這時候有兩個方法分享給各位

開啟VisualStudion 命令提示字元,需要以系統管理員的身分執行,在命令視窗中打上"sn -k SampleKey.snk",接著在該目錄下就可以找到這個檔案了

(在執行指令前可先替換資料夾目錄,會自動產生於該目錄下)

以下為圖解:

image

可以先用cd指令移動到該目錄下,我們先把它移動到C磁碟機下,之後我們下指令後,該檔案就會在C:\ 目錄下了

image

接下來打上指令,當畫面上出現"已將金鑰組寫入 SampleKey.snk",此時表示您已經成功產生密鑰文件了!接下來前往C:\的路徑就可以找到該文件

image

最後到VisualStudio中加入這個密鑰檔案,在專案中點【右鍵】->【屬性】->【簽署】

image

選擇強勢名稱金鑰檔中點選瀏覽,選取剛剛建立的密鑰黨就可以了!(第一個是專案預設的路徑,但不存在於專案中)

image

 

佈署SSRS Web

Step7

完成上述更改後,請按下建置後就會在bin/debug資料夾中產生dll檔案了,Microsoft.Samples.ReportingServices.CustomSecurity.dll Microsoft.Samples.ReportingServices.CustomSecurity.pdb,這兩個檔案複製到SSRS目錄下的ReportServer\binReportManager\bin這兩個目錄下

 

Step8

把專案目錄下的Logon.aspx複製到SSRS目錄下的ReportServer資料夾中

 

Step9

把專案目錄下的UILogon.aspx複製到SSRS目錄下的ReportManager\Pages資料夾中

 

修改設定檔案

以下設定建議先進行備份SSRS目錄下的檔案

 

Step10

部屬完成後,接下來要開始設定SSRS的設定檔,先開啟ReportServer資料夾中的ReportServer.config檔案,將<Authentication>標籤更改一下設定


<Authentication>
    <AuthenticationTypes>
      <Custom/>
    </AuthenticationTypes>
    <EnableAuthPersistence>true</EnableAuthPersistence>
    <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
    <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario>
  </Authentication>

Step11

在同一個檔案中尋找Security標籤將標籤中的取代為


<Security>
  <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, Microsoft.Samples.ReportingServices.CustomSecurity" >
    <Configuration>
      <AdminConfiguration>
        <UserName>username</UserName>
      </AdminConfiguration>
    </Configuration>
  </Extension>
</Security>
<Authentication>
  <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,Microsoft.Samples.ReportingServices.CustomSecurity" />
</Authentication>

Step12

在同一個檔案中,尋找UI標籤,並且將標籤的內容值取代如下

<server>的部分需要將您自己的伺服器名稱做修改


<UI>
  <CustomAuthenticationUI>
    <loginUrl>/Pages/UILogon.aspx</loginUrl>
    <UseSSL>True</UseSSL>
  </CustomAuthenticationUI>
  <ReportServerUrl>
    http://<server>/ReportServer</ReportServerUrl>
</UI>

PS. UseSSL 標籤若是false表示伺服器不支援SSL

 

Step 13

在同樣的ReportServer資料夾下,開啟另外一個Config檔案rssrvpolicy.config新增一個新的節點


<CodeGroup
    class="UnionCodeGroup"
    version="1"
    Name="SecurityExtensionCodeGroup"
    Description="Code group for the sample security extension"
    PermissionSetName="FullTrust">
  <IMembershipCondition
    class="UrlMembershipCondition"
    version="1"
    Url="C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll"
  />
</CodeGroup>

 

Step 14

接下來一動到ReportManager中同樣開啟rsmgrpolicy.config檔案,在檔案中尋找下列的標籤


<CodeGroup 
        class="FirstMatchCodeGroup" 
        version="1" 
        PermissionSetName="Execution"
        Description="This code group grants MyComputer code Execution permission. ">
	<IMembershipCondition 
            class="ZoneMembershipCondition"
            version="1"
            Zone="MyComputer" />

修改為


<CodeGroup 
        class="FirstMatchCodeGroup" 
        version="1" 
        PermissionSetName="FullTrust"
        Description="This code group grants MyComputer code Execution permission. ">
	<IMembershipCondition 
            class="ZoneMembershipCondition"
            version="1"
            Zone="MyComputer" />

Step 15

移動到ReportServer目錄下,開啟Web.config檔案,將Authentication標籤取代為下列資料


<authentication mode="Forms">
  <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" path="/"></forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>

Step 16

移動到ReportManager目錄下,開啟Web.config,將下列資料更改


<authentication mode="Forms" />
<identity impersonate="false" />

另外在檔案中尋找appSettings的標籤,並新增下列節點


<add key="ReportServer" value="<Server Name>"/>
<add key="ReportServerInstance" value="<Instance Name>"/>

 

建立表單登入資料庫

Step 17

接下來在專案檔中FormsAuthentication Sample\cs\FormsAuthentication\Setup目錄下,有CreateUserStore.sql檔案,請開啟後執行,建立存放帳號密碼的資料庫

 

Step18

最後建立使用者,先開啟ReportManager的URL,輸入一組帳號密碼後按下註冊,接下來到ReportServer中的rsreportserver.config

將剛剛註冊好的帳號,取代下面的username成為管理帳號即可完成SSRS的表單驗證


<Security>
  <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, Microsoft.Samples.ReportingServices.CustomSecurity" >
    <Configuration>
      <AdminConfiguration>
        <UserName>username</UserName>
      </AdminConfiguration>
    </Configuration>
  </Extension>
</Security>
<Authentication>
  <Extension Name="Forms" Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,Microsoft.Samples.ReportingServices.CustomSecurity" />
</Authentication>

 

 

 

參考資料

http://bharathonsqlserver.blogspot.tw/2012/09/forms-authentication-in-ssrs-2012.html

 


 

大家好我是饅頭,希望大家喜歡我的文章

如果有錯誤的地方請不吝指教 ^_^