共用方式為


Reporting Services 中的驗證

驗證是建立使用者身分識別權的程式。 有許多技術可用來驗證使用者。 最常見的方式是使用密碼。 例如,當您實作窗體驗證時,您想要實作來查詢使用者是否有認證(通常是由要求登入名稱和密碼的某些介面),然後根據數據存放區來驗證使用者,例如資料庫數據表或組態檔。 如果無法驗證認證,驗證程式會失敗,且用戶會假設匿名身分識別。

Reporting Services 中的自訂驗證

在 Reporting Services 中,Windows作系統會透過整合式安全性或使用者認證的明確接收和驗證來處理用戶的驗證。 您可以在 Reporting Services 中開發自定義驗證,以支援其他驗證配置。 這可透過安全性延伸模組介面 IAuthenticationExtension來達成。 所有延伸模組都會繼承自 IExtension 報表伺服器所部署及使用之任何延伸模組的基底介面。 IExtension IAuthenticationExtension以及,都是命名空間的成員Microsoft.ReportingServices.Interfaces

在 Reporting Services LogonUser 中,針對報表伺服器進行驗證的主要方法是方法。 Reporting Services Web 服務的這個成員可用來將使用者認證傳遞至報表伺服器進行驗證。 您的基礎安全性延伸模組會實作包含自定義驗證碼 的 IAuthenticationExtension.LogonUser 。 在窗體驗證範例中, LogonUser 會針對提供的認證和資料庫中的自定義使用者存放區執行驗證檢查。 LogonUser 實作的范例如下所示:

public bool LogonUser(string userName, string password, string authority)  
{  
   return AuthenticationUtilities.VerifyPassword(userName, password);  
}  
  

下列範例函式可用來驗證提供的認證:

  
internal static bool VerifyPassword(string suppliedUserName,  
   string suppliedPassword)  
{   
   bool passwordMatch = false;  
   // Get the salt and pwd from the database based on the user name.  
   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:  
   // Use DPAPI (User Store) from Enterprise Services," and "How To:  
   // Create a DPAPI Library" for more information about how to use  
   // DPAPI to securely store connection strings.  
   SqlConnection conn = new SqlConnection(  
      "Server=localhost;" +   
      "Integrated Security=SSPI;" +  
      "database=UserAccounts");  
   SqlCommand cmd = new SqlCommand("LookupUser", conn);  
   cmd.CommandType = CommandType.StoredProcedure;  
  
   SqlParameter sqlParam = cmd.Parameters.Add("@userName",  
       SqlDbType.VarChar,  
       255);  
   sqlParam.Value = suppliedUserName;  
   try  
   {  
      conn.Open();  
      SqlDataReader reader = cmd.ExecuteReader();  
      reader.Read(); // Advance to the one and only row  
      // Return output parameters from returned data stream  
      string dbPasswordHash = reader.GetString(0);  
      string salt = reader.GetString(1);  
      reader.Close();  
      // Now take the salt and the password entered by the user  
      // and concatenate them together.  
      string passwordAndSalt = String.Concat(suppliedPassword, salt);  
      // Now hash them  
      string hashedPasswordAndSalt =  
         FormsAuthentication.HashPasswordForStoringInConfigFile(  
         passwordAndSalt,  
         "SHA1");  
      // Now verify them. Returns true if they are equal.  
      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);  
   }  
   catch (Exception ex)  
   {  
       throw new Exception("Exception verifying password. " +  
          ex.Message);  
   }  
   finally  
   {  
       conn.Close();  
   }  
   return passwordMatch;  
}  

驗證流程

Reporting Services Web 服務提供自定義驗證延伸模組,以啟用報表管理員和報表伺服器的窗體驗證。

LogonUser Reporting Services Web 服務的方法可用來將認證提交至報表伺服器進行驗證。 Web 服務會使用 HTTP 標頭,將驗證票證(稱為「Cookie」)從伺服器傳遞至用戶端,以取得已驗證的登入要求。

下圖說明當您的應用程式部署時,使用設定為使用自定義驗證延伸模組的報表伺服器來驗證使用者至 Web 服務的方法。

Reporting Services 安全性驗證流程

如圖 2 所示,驗證程式如下所示:

  1. 用戶端應用程式會呼叫 Web 服務 LogonUser 方法來驗證使用者。

  2. Web 服務會呼叫 LogonUser 安全性延伸模組的 方法,特別是實作 IAuthenticationExtension 的類別。

  3. 的實作 LogonUser 會驗證使用者存放區或安全性授權單位中的使用者名稱和密碼。

  4. 成功驗證后,Web 服務會建立 Cookie 並管理工作階段的 Cookie。

  5. Web 服務會將驗證票證傳回 HTTP 標頭上的呼叫應用程式。

Web 服務透過安全性延伸模組成功驗證使用者時,會產生用於後續要求的 Cookie。 Cookie 可能不會保存在自定義安全性授權單位內,因為報表伺服器未擁有安全性授權單位。 Cookie 會從 LogonUser Web 服務方法傳回,並在後續的 Web 服務方法呼叫和 URL 存取中使用。

備註

為了避免在傳輸期間危害 Cookie,應使用安全套接字層 (SSL) 加密安全地傳輸從 LogonUser 傳回的驗證 Cookie。

如果您在安裝自定義安全性延伸模組時透過URL存取存取報表伺服器,Internet Information Services (IIS) 和 ASP.NET 會自動管理驗證票證的傳輸。 如果您要透過SOAP API存取報表伺服器,則 Proxy 類別的實作必須包含管理驗證票證的額外支援。 如需使用SOAP API和管理驗證票證的詳細資訊,請參閱<使用Web服務搭配自定義安全性>。

窗體驗證

窗體驗證是一種 ASP.NET 驗證類型,其中未經驗證的用戶會導向至 HTML 窗體。 一旦使用者提供認證,系統就會發出包含驗證票證的Cookie。 在稍後的要求中,系統會先檢查 Cookie,以查看使用者是否已由報表伺服器進行驗證。

Reporting Services 可以使用透過 Reporting Services API 提供的安全性擴充性介面,擴充以支援窗體驗證。 如果您擴充 Reporting Services 以使用窗體驗證,請使用安全套接字層 (SSL) 與報表伺服器的所有通訊,以防止惡意使用者存取其他使用者的 Cookie。 SSL 可讓用戶端和報表伺服器彼此驗證,並確保其他計算機無法讀取兩部計算機之間的通訊內容。 透過 SSL 連線從用戶端傳送的所有資料都會加密,讓惡意使用者無法攔截傳送至報表伺服器的密碼或數據。

窗體驗證通常會實作以支援 Windows 以外的平臺的帳戶和驗證。 圖形化介面會顯示給要求報表伺服器存取權的使用者,並提供的認證會提交給安全性授權單位進行驗證。

窗體驗證需要有人員才能輸入認證。 對於直接與 Reporting Services Web 服務通訊的自動應用程式,窗體驗證必須與自定義驗證配置結合。

窗體驗證適用於 Reporting Services 時:

  • 您必須儲存和驗證沒有Microsoft Windows 帳戶的使用者,以及

  • 您必須提供您自己的使用者介面窗體,做為網站上不同頁面之間的登入頁面。

撰寫支援窗體驗證的自訂安全性延伸模組時,請考慮下列事項:

  • 如果您使用窗體驗證,則必須在 Internet Information Services (IIS) 的報表伺服器虛擬目錄上啟用匿名存取。

  • ASP.NET 驗證必須設定為 Forms。 您可以在報表伺服器的 Web.config 檔案中設定 ASP.NET 驗證。

  • Reporting Services 可以使用 Windows 驗證或自定義驗證來驗證和授權使用者,但不能同時驗證和授權使用者。 Reporting Services 不支持同時使用多個安全性延伸模組。

另請參閱

實作安全性延伸模組