2013-09-22 30 views
1

我在C#/ Mono中使用Apache2下的ServiceStack运行Rest-Service。 Apache-Server使用SSL和BasicAuthentication与htpasswd文件。获取经过身份验证的用户,通过Mono和ServiceStack下的Apache Basic Auth验证

如果我访问我的休息服务,我会得到apache的auth-Request,这是很好的。验证我的RestService被访问后。现在我的问题是:我如何能够获得请求该服务并对其进行身份验证的用户(apache会话用户)? 我已经试图获得环境变量,但没有得到所需的信息。据我所知,构建在ServiceStack中的Authentication需要我自己实现身份验证。但我想使用apache的认证。

有谁知道溶剂?

问候 每天

附: 下面是我的站点配置的单声道和SSL相关章节阿帕奇:

SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/apache.pem 
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key 
    SSLOptions StrictRequire +StdEnvVars 
    SSLProtocol all -SSLv2 

    MonoServerPath wcs.service.de "/usr/bin/mod-mono-server4" 
    MonoDebug wcs.service.de true 
    MonoSetEnv wcs.service.de MONO_IOMAP=all 
    MonoAutoApplication disabled 
    MonoApplications wcs.service.de "/:/var/www/wcs" 
+0

我找到了解决方案!它由ServiceStack RequestFilter,原始的ASP.net请求和参数“REMOTE_USER”组成。明天将发布更详细的解决方案;) – daily

回答

2

一点点晚于明显,但在这里就是问题的答案。

在您的ServiceStack服务中,您将RequestDTO作为参数。请参阅此链接:

https://github.com/ServiceStack/ServiceStack/wiki/Access-HTTP-specific-features-in-services

下点服务,你可以明白我的意思。您不需要我在上面的答案中建议的RequestFilter。然而..你有这个IHttpRequest of Servicestack。在这个对象上你可以得到OriginalRequest。这是最初的ASP.net-Request。您必须将结果转换为HttpRequest(ASP.net)。

var orgRequest = (HttpRequest)request.OriginalRequest; 

在这个新铸造的对象上,你有一个可访问的字段参数。您现在可以获取包含我需要的SSL用户的REMOTE_USER参数。

var sslUser = orgRequest.Param["REMOTE_USER"]; 

我希望这可以帮助有人遇到同样的问题。

问候,每天

相关问题