获取经过身份验证的用户,由Apache Basic Auth在Mono和ServiceStack下进行验证

时间:2013-09-22 10:55:00

标签: c# apache rest mono servicestack

我在C#/ Mono的Apache2下使用ServiceStack运行Rest-Service。 Apache-Server使用SSL和BasicAuthentication与htpasswd文件。

如果我访问我的Rest-Service,我会得到aph的auth-Request,这很好。验证后,我的RestService被访问。现在我的问题是:我如何能够获得已请求服务并对其进行身份验证的用户(apache-session用户)? 我已经尝试过获取环境变量,但没有得到所需的信息。

根据我的理解,内置的ServiceStack身份验证要求我自己实现身份验证。但是我想使用apache的身份验证。

有人知道溶解吗?

问候 每日

P.S。 以下是我的Site-config for apache的Mono和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"

1 个答案:

答案 0 :(得分:2)

比发音晚一点,但这是问题的答案。

在ServiceStack服务中,您将RequestDTO作为参数。看到这个链接:

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

在服务点下你可以看到我的意思。您不需要我在上面的答案中建议的RequestFilter。但是..你有这个IHttpRequest Servicestack。在此对象上,您可以获得OriginalRequest。这是原始的ASP.net-Request。您必须将结果强制转换为HttpRequest(ASP.net)。

var orgRequest = (HttpRequest)request.OriginalRequest;

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

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

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

每天的问候