【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
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",接著在該目錄下就可以找到這個檔案了
(在執行指令前可先替換資料夾目錄,會自動產生於該目錄下)
以下為圖解:
可以先用cd指令移動到該目錄下,我們先把它移動到C磁碟機下,之後我們下指令後,該檔案就會在C:\ 目錄下了
接下來打上指令,當畫面上出現"已將金鑰組寫入 SampleKey.snk",此時表示您已經成功產生密鑰文件了!接下來前往C:\的路徑就可以找到該文件
最後到VisualStudio中加入這個密鑰檔案,在專案中點【右鍵】->【屬性】->【簽署】
選擇強勢名稱金鑰檔中點選瀏覽,選取剛剛建立的密鑰黨就可以了!(第一個是專案預設的路徑,但不存在於專案中)
佈署SSRS Web
Step7
完成上述更改後,請按下建置後就會在bin/debug資料夾中產生dll檔案了,Microsoft.Samples.ReportingServices.CustomSecurity.dll 與 Microsoft.Samples.ReportingServices.CustomSecurity.pdb,這兩個檔案複製到SSRS目錄下的ReportServer\bin與ReportManager\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
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^