2013-09-22 60 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"]; 

我希望這可以幫助有人遇到同樣的問題。

問候,每天

相關問題