SSRS 表单身份验证 - 如何将 Cookie 凭据传递到报表服务器
SSRS Forms Authentication - How To Pass Cookie Credentials To Report Server
我目前正在尝试使用表单身份验证在我的 Web 应用程序中呈现 SSRS 报告。
我的 SSRS 报告版本是 2016。
最初我的印象是 NetworkCredentials 可以工作,在遇到错误后,我发现我们需要使用 FormsAuthentication,并传递 cookie 作为对用户进行身份验证的一种方式。
我已经按照下面 link 中的指南对报告服务器中的配置文件进行了必要的设置:-
https://github.com/Microsoft/Reporting-Services/tree/master/CustomSecuritySample2016
报告服务在 localhost/ReportServer 和
SSRS 门户,localhost/Reports。我也可以访问所述服务器
远程。
下面是我用来获取经过身份验证的 cookie 的代码。
MyReportingService rsClient = new MyReportingService();
rsClient.Url = "http://xxx.xxx.xxx.xxx/reportserver/ReportService2010.asmx";
try
{
rsClient.LogonUser("user", "password", "");
Cookie myAuthCookie = rsClient.AuthCookie;
HttpCookie cookie = new HttpCookie(myAuthCookie.Name, myAuthCookie.Value);
Response.Cookies.Add(cookie);
}
据称随后将用于对用户进行身份验证。
Cookie authCookie = new Cookie(cookie2.Name, cookie2.Value);
authCookie.Domain = "DomainName";
rvSiteMapping.ServerReport.ReportServerCredentials = new MyReportServerCredentials(authCookie);
rvSiteMapping.ServerReport.Cookies.Add(authCookie);
并且在我的 IReportsServerCredentials 内的表单身份验证中 Class:-
public bool GetFormsCredentials(out Cookie authCookie,
out string user, out string password, out string authority)
{
authCookie = m_authCookie;
user = password = authority = null;
return true; // Use forms credentials to authenticate.
}
我遇到的问题是应用程序将凭据传递到报表服务器时。我相信我一定是做错了这部分,因为虽然我的应用程序确实获得了 cookie,但当它验证 cookie 提供的凭据时,我收到 text/html 错误:-
Object moved to <a href="/ReportServer/logon.aspx?ReturnUrl=%2fReportserver%2fReportExecution2005.asmx" />
此错误是为了响应在以下情况下设置默认通用标识
HttpContext.Current.User = null.
if (HttpContext.Current != null
&& HttpContext.Current.User != null)
{
userIdentity = HttpContext.Current.User.Identity;
}
else
{
userIdentity = new GenericIdentity("AnonymousUser");
}
我尝试用谷歌搜索答案,但大部分结果都是
windows 身份验证和少数与表单身份验证相关的
与我提到的代码非常相似。
问题的根本原因一直在我眼皮底下。
域名应该指的是 web 域而不是活动目录域。
authCookie.Domain = "DomainName";
Cookie 现在能够按预期对用户进行身份验证。
希望这对碰巧犯同样错误的人有所帮助。
我目前正在尝试使用表单身份验证在我的 Web 应用程序中呈现 SSRS 报告。
我的 SSRS 报告版本是 2016。
最初我的印象是 NetworkCredentials 可以工作,在遇到错误后,我发现我们需要使用 FormsAuthentication,并传递 cookie 作为对用户进行身份验证的一种方式。
我已经按照下面 link 中的指南对报告服务器中的配置文件进行了必要的设置:-
https://github.com/Microsoft/Reporting-Services/tree/master/CustomSecuritySample2016
报告服务在 localhost/ReportServer 和 SSRS 门户,localhost/Reports。我也可以访问所述服务器 远程。
下面是我用来获取经过身份验证的 cookie 的代码。
MyReportingService rsClient = new MyReportingService();
rsClient.Url = "http://xxx.xxx.xxx.xxx/reportserver/ReportService2010.asmx";
try
{
rsClient.LogonUser("user", "password", "");
Cookie myAuthCookie = rsClient.AuthCookie;
HttpCookie cookie = new HttpCookie(myAuthCookie.Name, myAuthCookie.Value);
Response.Cookies.Add(cookie);
}
据称随后将用于对用户进行身份验证。
Cookie authCookie = new Cookie(cookie2.Name, cookie2.Value);
authCookie.Domain = "DomainName";
rvSiteMapping.ServerReport.ReportServerCredentials = new MyReportServerCredentials(authCookie);
rvSiteMapping.ServerReport.Cookies.Add(authCookie);
并且在我的 IReportsServerCredentials 内的表单身份验证中 Class:-
public bool GetFormsCredentials(out Cookie authCookie,
out string user, out string password, out string authority)
{
authCookie = m_authCookie;
user = password = authority = null;
return true; // Use forms credentials to authenticate.
}
我遇到的问题是应用程序将凭据传递到报表服务器时。我相信我一定是做错了这部分,因为虽然我的应用程序确实获得了 cookie,但当它验证 cookie 提供的凭据时,我收到 text/html 错误:-
Object moved to <a href="/ReportServer/logon.aspx?ReturnUrl=%2fReportserver%2fReportExecution2005.asmx" />
此错误是为了响应在以下情况下设置默认通用标识 HttpContext.Current.User = null.
if (HttpContext.Current != null
&& HttpContext.Current.User != null)
{
userIdentity = HttpContext.Current.User.Identity;
}
else
{
userIdentity = new GenericIdentity("AnonymousUser");
}
我尝试用谷歌搜索答案,但大部分结果都是 windows 身份验证和少数与表单身份验证相关的 与我提到的代码非常相似。
问题的根本原因一直在我眼皮底下。
域名应该指的是 web 域而不是活动目录域。
authCookie.Domain = "DomainName";
Cookie 现在能够按预期对用户进行身份验证。
希望这对碰巧犯同样错误的人有所帮助。