Reporting Services의 인증

인증은 ID에 대한 사용자의 권리를 설정하는 프로세스입니다. 사용자를 인증하는 데 사용할 수 있는 많은 방법이 있습니다. 가장 일반적인 방법은 암호를 사용하는 것입니다. 예를 들어 양식 인증을 구현할 때 사용자에게 자격 증명을 쿼리하고(일반적으로 로그인 이름 및 암호를 요청하는 일부 인터페이스에 의해) 데이터베이스 테이블 또는 구성 파일과 같은 데이터 저장소에 대해 사용자의 유효성을 검사하는 구현이 필요합니다. 자격 증명의 유효성을 검사할 수 없는 경우 인증 프로세스가 실패하고 사용자가 익명 ID를 가정합니다.

Reporting Services의 사용자 지정 인증

Reporting Services에서 Windows 운영 체제는 통합 보안을 통해 또는 사용자 자격 증명의 명시적인 수신과 검사를 통해 사용자 인증을 처리합니다. 더 많은 인증 체계를 지원하기 위해 Reporting Services에서 사용자 지정 인증을 개발할 수 있습니다. 이 지원은 보안 확장 인터페이스 IAuthenticationExtension2를 통해 가능합니다. 모든 확장은 보고서 서버에서 배포하고 사용하는 모든 확장에 대한 기본 인터페이스에서 IExtension 상속됩니다. IExtensionIAuthenticationExtension2네임스페이 Microsoft.ReportingServices.Interfaces 스의 멤버입니다.

Reporting Services에서 보고서 서버와 대조하여 인증하는 기본적인 방법은 LogonUser 메서드입니다. Reporting Services 웹 서비스의 이 멤버를 사용하여 유효성 검사를 위해 보고서 서버에 사용자 자격 증명을 전달할 수 있습니다. 기본 보안 확장은 사용자 지정 인증 코드를 포함하는 IAuthenticationExtension2.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 웹 서비스는 보고서 관리자 및 웹 포털에 의한 폼 인증을 사용할 수 있도록 사용자 지정 인증 확장 프로그램을 제공합니다.

LogonUser Reporting Services 웹 서비스의 메서드는 인증을 위해 보고서 서버에 자격 증명을 제출하는 데 사용됩니다. 웹 서비스는 HTTP 헤더를 사용하여 유효성이 검사된 로그인 요청에 대해 서버에서 클라이언트로 인증 티켓("쿠키"라고 함)을 전달합니다.

다음 그림은 사용자 지정 인증 확장 프로그램을 사용하도록 구성된 보고서 서버와 함께 배포된 애플리케이션의 경우 웹 서비스에 사용자를 인증하는 메서드를 나타냅니다.

Screenshot of the Reporting Services security authentication flow.

그림 2에 표시된 것처럼 인증 프로세스는 다음과 같습니다.

  1. 클라이언트 애플리케이션에서 사용자를 인증하도록 웹 서비스 LogonUser 메서드를 호출합니다.

  2. 웹 서비스에서 보안 확장 프로그램, 특히 IAuthenticationExtension2를 구현하는 클래스의 LogonUser 메서드를 호출합니다.

  3. 구현은 LogonUser 사용자 저장소 또는 보안 기관에서 사용자 이름 및 암호의 유효성을 검사합니다.

  4. 인증에 성공하면 웹 서비스에서 쿠키를 만들고 세션에 대해 관리합니다.

  5. 웹 서비스는 HTTP 헤더의 호출 애플리케이션에 인증 티켓을 반환합니다.

웹 서비스가 보안 확장을 통해 사용자를 성공적으로 인증하면 후속 요청에 사용되는 쿠키가 생성됩니다. 보고서 서버가 보안 기관을 소유하지 않으므로 쿠키가 사용자 지정 보안 기관 내에서 유지되지 않을 수 있습니다. 쿠키는 LogonUser 웹 서비스 메서드에서 반환되고 이후 웹 서비스 메서드 호출 및 URL 액세스에서 사용됩니다.

참고 항목

전송 중에 쿠키가 손상되지 않도록 하려면 이전에 SSL(Secure Sockets Layer) 암호화라고도 하는 TLS(전송 계층 보안)를 사용하여 반환 LogonUser 된 인증 쿠키를 안전하게 전송해야 합니다.

사용자 지정 보안 확장 프로그램이 설치되어 있는 경우 URL 액세스를 통해 보고서 서버에 액세스하면 IIS(인터넷 정보 서비스) 및 ASP.NET에서 인증 티켓 전송을 자동으로 관리합니다. SOAP API를 통해 보고서 서버에 액세스하는 경우 프록시 클래스 구현에 인증 티켓 관리에 대한 추가 지원이 포함되어야 합니다. SOAP API를 사용하고 인증 티켓을 관리하는 방법은 "웹 서비스에서 사용자 지정 보안 사용"을 참조하십시오.

폼 인증

폼 인증은 인증되지 않은 사용자를 HTML 양식으로 지정하는 ASP.NET 인증 유형입니다. 사용자가 자격 증명을 제공하면 시스템에서 인증 티켓이 포함된 쿠키를 발급합니다. 이후 요청 시 시스템은 먼저 쿠키를 검사 보고서 서버가 사용자를 인증했는지 확인합니다.

Reporting Services는 Reporting Services API를 통해 사용 가능한 보안 확장성 인터페이스를 사용하여 폼 인증을 지원하도록 확장할 수 있습니다. Reporting Services를 확장하여 폼 인증을 사용할 경우 보고서 서버와의 모든 통신에 대해 이전에 SSL(Secure Sockets Layer)로 알려진 TLS(전송 계층 보안)를 사용하여 악의적인 사용자가 다른 사용자의 쿠키에 액세스하지 못하도록 해야 합니다. TLS를 사용하면 클라이언트와 보고서 서버 간의 상호 인증이 가능하며 이 두 컴퓨터 간의 통신 내용을 다른 컴퓨터에서 읽지 못하도록 할 수 있습니다. 악의적인 사용자가 보고서 서버로 전송된 암호 또는 데이터를 가로챌 수 없도록 TLS 연결을 통해 클라이언트에서 보낸 모든 데이터는 암호화됩니다.

양식 인증은 Windows 이외의 플랫폼에 대한 계정 및 인증을 지원하도록 구현됩니다. 보고서 서버 액세스를 요청하는 사용자는 그래픽 인터페이스를 볼 수 있으며, 제공된 자격 증명은 인증을 위해 보안 기관에 제출됩니다.

양식 인증을 사용하려면 자격 증명을 입력할 사람이 있어야 합니다. Reporting Services 웹 서비스와 직접 통신하는 무인 애플리케이션의 경우 양식 인증을 사용자 지정 인증 체계와 결합해야 합니다.

폼 인증은 다음의 경우 Reporting Services에 적합합니다.

  • Microsoft Windows 계정이 없는 사용자를 저장하고 인증해야 합니다.

  • 웹 사이트의 여러 페이지 간에 로그인 페이지로 사용자 고유의 사용자 인터페이스 양식을 제공해야 합니다.

Forms 인증을 지원하는 사용자 지정 보안 확장을 작성할 때 다음 사항을 고려합니다.

  • Forms 인증을 사용하는 경우 IIS(인터넷 정보 서비스)의 보고서 서버 가상 디렉터리에서 익명 액세스를 사용하도록 설정해야 합니다.

  • ASP.NET 인증은 폼 인증으로 설정해야 합니다. 보고서 서버의 경우 Web.config 파일에서 ASP.NET 인증을 구성합니다.

  • Reporting Services는 Windows 인증 또는 사용자 지정 인증으로 사용자를 인증하고 권한을 부여할 수 있으며, 두 가지 인증을 모두 사용할 수는 없습니다. Reporting Services는 여러 보안 확장의 동시 사용을 지원하지 않습니다.