我知道处理服务身份验证/授权的方法不止一种,但我无法让它对静态文件起作用。
是否有一种方法可以将行为配置为与服务相同?如果未通过身份验证,对 index.html 的请求应该重定向到登录页面,就像对安全 dto/服务的请求一样。
我目前正在研究 RawHttpHandlers,但由于在管道中还为时过早,我该如何在 apphost 配置中获取身份验证设置?
提前致谢 杰尔吉
最佳答案
您必须使用 IAppHost.RawHttpHandlers
,因为这是 ServiceStack's Request Pipeline 中唯一的自定义处理程序在访问内置静态文件处理之前执行。
但是您仍然应该能够使用可用的扩展方法访问用户 session ,例如:
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
开头,如果是则检查用户 session 是否具有所需的角色,如果没有它返回一个 Forbidden 请求,否则它返回 null
告诉 ServiceStack 继续执行请求。
注意:如果需要,您可以使用 HostContext.Resolve 从 ServiceStack 外部访问任何已注册的依赖项,例如:
var authRepo = HostContext.Resolve<IAuthRepository>();
关于authentication - ServiceStack - 防止未经授权访问静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960231/