2014-02-22 78 views
2

我知道有多種方式來處理服務認證/授權,但我無法使其適用於靜態文件。ServiceStack - 防止對靜態文件的未經授權的訪問

有沒有一種方法將行爲配置爲與服務相同;如果未通過身份驗證,則對index.html的請求應重定向至登錄頁面,與請求保護dto /服務相同。

我目前正在研究RawHttpHandlers,但由於它在管道中還爲時過早我如何獲得apphost配置中的身份驗證設置?

在此先感謝 Gjergji

回答

1

你將不得不使用IAppHost.RawHttpHandlers,因爲這是在ServiceStack's Request Pipeline訪問內置的靜態文件處理之前被執行的唯一的自定義處理程序。

但是你應該仍然能夠訪問用戶會話與可用擴展方法,如:

this.RawHttpHandlers.Add(httpReq => 
{ 
    var isStaticFileRequest = httpReq.PathInfo.StartsWith("/static"); 
    if (isStaticFileRequest) 
    { 
     var session = httpReq.GetSession(); 
     if (!session.HasRole("TheRole")) 
      return new ForbiddenHttpHandler(); 
    } 
    return null; 
}); 

這個處理器簡單地檢查,如果它是一個靜態文件的請求,在這種情況下,路徑信息開始與/static,如果是檢查用戶會話,如果他們具有所需的角色,如果不是,它會返回一個禁止請求,否則返回null告訴ServiceStack繼續執行請求。

注:如果它需要你可以訪問任何註冊的依賴性和ServiceStack之外與HostContext.Resolve,e.g:

var authRepo = HostContext.Resolve<IAuthRepository>();