2012-06-25 30 views
24

* Ortamın ayrıntıları aşağıda açıklanmıştır.temel kimlik doğrulama sorununu rapor yöneticisine nasıl iletilir url

Raporlama hizmetleri için bir kimlik doğrulama çözümü oluşturmaya çalışıyorum.

Çevrimiçi müşteri, mevcut müşteri veritabanımızı kullanarak doğrulanmalı, yerel yönetim kullanıcıları ise basit, Temel, kimlik doğrulaması kullanabilir.

CodePlex örnekler ve ben o şekilde

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; 
} 

aşağıdaki gibi temel mücadeledir sorunu kullanma şeklinizi kullanarak SSRS bir güvenlik uzantısı yapmış

zaman LogonUser yöntemiyle geçmemiş bir kullanıcı (ör. doğrudan URL erişimi, teklifler uygulama dağıtımı, normal kullanıcı uygulamaları değil) Temel oturum açma/şifre açılır penceresine meydan okunuyor. /ReportServer URL'yi erişirken Bu iyi çalışır

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); 
     } 
    } 
} 

şöyle Bunu desteklemek için bir HttpModule'ü yapılmış, ben meydan olsun,/kodlanmış yönetici girişi yazın geçmek ve oturum almak. Ben geçebilir nasıl bilmek istiyorum

Yetkisiz: istek 401 HTTP durum başarısız oldu: Ben

System.NET.WebException olsun /Reports erişirken

sorundur giriş/çıkış tüm yol aşağı /Reports

Raporlama Servi ile birlikte SqlServer 2012 çalıştırıyorum ces 2012, ama iç işleyişi ben

var benim HttpModule için Codegroup FullTrust

rsreportserver.config günü

ile ben rssrvpolicy.config günü

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

var benim web.config yılında SSRS 2008-R2

den değişmemiştir

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

Henüz yapılandırılmamış SSL ve bağlamaları ir default

+0

Yine de bir cevabı çok isterim, ancak şimdilik bir geçici çözüm yaptım. HttpModule'im üzerinde yalnızca yerel makine erişimi aracılığıyla rapor yöneticisine erişime izin veriyorum. Yerel makineden erişirken, bağlam kullanıcısını sadece yönetici olarak ayarlıyorum. Oldukça çirkin bir çözüm, ama yine de bir çözüm. –

+0

ReportManager, aynı ortak SOAP API'sini kullanarak ReportServer'a konuşur, bu nedenle bir şekilde kendini doğrulamak zorundadır. Aynı modülü ReportManager yapılandırma dosyalarına eklemeniz gerektiğini tahmin ediyorum. Umarım, ReportManager, ReportServer ile konuşmak için aynı kimlik bilgisini veya kimlik bilgilerini kullanır. – user1578107

+0

Özel güvenlik mümkündür. SSRS hizmet seviyesinde Kimlik Doğrulama ve Yetkilendirme yöntemlerini geçersiz kılarsanız, ssrs yöneticisi ile işlevlerin dahil edilmesi ve varsayılan oturum açma sayfası sağlanması meselesidir. –

cevap

4

Hata iletisinden, rapor yöneticisinin UI'sini oluştururken kimlik doğrulama hatasının oluştuğu anlaşılıyor. Lütfen c: \ Program Files \ Microsoft SQL Server \ MSRS11.MSSQLSERVER \ Reporting Services \ ReportManager \ klasörüne gidin ve web.config dosyasını bulun ve aşağıdaki değişiklikleri uygulayın.

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