2012-06-25 19 views
24

* Chi tiết về môi trường được mô tả ở dưới cùng.cách chuyển tiếp thử thách xác thực cơ bản để báo cáo url của người quản lý

Tôi đang cố gắng xây dựng giải pháp xác thực cho dịch vụ báo cáo.

Nhân viên chi phí trực tuyến phải được xác thực bằng cơ sở dữ liệu chi phí hiện có của chúng tôi, trong khi người dùng quản trị cục bộ có thể sử dụng đơn giản, Cơ bản, xác thực.

Tôi đã thực hiện một phần mở rộng an ninh để SSRS sử dụng các ví dụ CodePlex và cách tôi sử dụng để đưa ra những thách thức cơ bản là như sau

public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId) 
{ 
    if (HttpContext.Current != null && HttpContext.Current.User != null) 
     userIdentity = HttpContext.Current.User.Identity; 
    else 
    { 
     HttpContext.Current.Response 
      .AddHeader("WWW-Authenticate", "Basic realm=\"ReportServer\""); 
     HttpContext.Current.Response.Status = "401 Unauthorized"; 
     HttpContext.Current.Response.Flush(); 
     HttpContext.Current.Response.Close(); 
     userIdentity = new GenericIdentity("not authorized"); 
    } 

    userId = IntPtr.Zero; 
} 

Bằng cách đó khi người dùng đã không được thông qua thông qua các phương pháp LogonUser (ví dụ: truy cập url trực tiếp, triển khai báo cáo giá thầu, không phải ứng dụng người dùng thông thường) được thử thách với cửa sổ bật lên đăng nhập Cơ bản/mật khẩu. Để hỗ trợ điều này tôi đã thực hiện một HttpModule như sau

void IHttpModule.Init(HttpApplication context) 
{ 
    context.AuthenticateRequest += CustomAuthenticateRequest; 
} 

void CustomAuthenticateRequest(object sender, EventArgs e) 
{ 
    var app = sender as HttpApplication; 

    if (app == null) return; 

    var basicAuth = app.Context.Request.Headers["Authorization"]; 

    if (!string.IsNullOrEmpty(basicAuth)) 
    { 
     var loginpass = Encoding.Default.GetString(
      Convert.FromBase64String(basicAuth.Replace("Basic ", ""))).Split(':'); 
     if (loginpass.Length == 2 
      && loginpass[0] == adminUser 
      && loginpass[1] == adminPass) 
     { 
      app.Context.User = new GenericPrincipal(
       new GenericIdentity(adminUser), null); 
     } 
    } 
} 

này hoạt động tốt khi truy cập vào /ReportServer URL, tôi nhận được thử thách, nhập tên đăng nhập quản trị mã hóa cứng/vượt qua và thường xuyên bị thoát ra.

Vấn đề là khi truy cập vào /Reports tôi nhận được

System.Net.WebException: Yêu cầu thất bại với trạng thái HTTP 401: trái phép

Tôi muốn biết làm thế nào tôi có thể vượt qua đăng nhập/vượt qua thách thức tất cả các con đường xuống /Reports

Tôi đang chạy SqlServer 2012 cùng với Báo cáo Servi ces 2012, nhưng các hoạt động bên đã không thay đổi từ SSRS 2008-R2

Trong web.config của tôi, tôi có

<authentication mode="None" /> 
<identity impersonate="false" />, and the entry for the httpmodule 

On rssrvpolicy.config các codegroup cho HttpModule của tôi là với FullTrust

On rsreportserver.config Tôi có

<AuthenticationTypes> 
     <Custom/> 
    </AuthenticationTypes>, and the entry for the security extension 

Tôi chưa có cấu hình SSL được định cấu hình. ir mặc định

+0

Tôi vẫn yêu câu trả lời, nhưng bây giờ tôi đã giải quyết xong. Trên HttpModule của tôi, tôi chỉ cho phép truy cập vào trình quản lý báo cáo thông qua truy cập máy cục bộ. Khi truy cập từ máy cục bộ, tôi chỉ đặt người dùng ngữ cảnh làm quản trị viên. Một giải pháp hết sức xấu xí, nhưng một giải pháp không bao giờ. –

+0

ReportManager trao đổi với ReportServer sử dụng cùng một API SOAP công cộng, vì vậy nó phải tự xác thực bằng cách nào đó. Tôi đoán rằng bạn cần phải thêm cùng một mô-đun vào các tệp cấu hình ReportManager. Tôi hy vọng ReportManager sau đó sẽ sử dụng cùng một cookie hoặc thông tin xác thực auth để nói chuyện với ReportServer. – user1578107

+0

Bảo mật tùy chỉnh là có thể. Nếu bạn ghi đè các phương thức Authenticate và Authorize ở cấp dịch vụ SSRS thì nó chỉ là vấn đề bao gồm các hàm với trình quản lý ssrs và cung cấp một trang đăng nhập mặc định. –

Trả lời

4

Từ thông báo lỗi, có vẻ như lỗi xác thực xảy ra khi hiển thị giao diện người dùng của trình quản lý báo cáo. Hãy đi đến thư mục, c: \ Program Files \ Microsoft SQL Server \ MSRS11.MSSQLSERVER \ Reporting Services \ ReportManager \, và tìm ra tệp web.config và áp dụng các thay đổi sau.

<authentication mode="None" /> 
<identity impersonate="false" />, and the entry for the httpmodule 
Các vấn đề liên quan