Authentication 要求使用ServiceStack对(几乎)每个请求进行身份验证
我正在使用ServiceStack构建一个ERP,并已连接身份验证并正在工作。但是,我希望基本上在每个路由、DTO或静态页面上都需要身份验证—除了登录页面和支持资源(CSS、图像) 有没有一种简单、集中的方法来做到这一点?我可以对每个DTO/路由应用Authentication 要求使用ServiceStack对(几乎)每个请求进行身份验证,authentication,servicestack,Authentication,servicestack,我正在使用ServiceStack构建一个ERP,并已连接身份验证并正在工作。但是,我希望基本上在每个路由、DTO或静态页面上都需要身份验证—除了登录页面和支持资源(CSS、图像) 有没有一种简单、集中的方法来做到这一点?我可以对每个DTO/路由应用[Authenticate],但很容易错过一个 如何要求对所有请求进行身份验证,并保存一些请求?我怀疑a是某种形式的,但我不确定如何开始。对,最简单的方法是使用: 这将确保所有服务请求都经过身份验证,为了验证ServiceStack处理的非服务请求是
[Authenticate]
,但很容易错过一个
如何要求对所有请求进行身份验证,并保存一些请求?我怀疑a是某种形式的,但我不确定如何开始。对,最简单的方法是使用: 这将确保所有服务请求都经过身份验证,为了验证ServiceStack处理的非服务请求是否经过身份验证,您可以使用
PreRequestFilters
:
PreRequestFilters.Add((req, res) => {
if (!req.IsAuthenticated())
{
res.StatusCode = (int) HttpStatusCode.Unauthorized;
res.EndRequest();
}
});
@mythz的解决方案是最正确的,但在我的情况下,我有一些特定的附加标准,我最初没有问。也就是说,我想允许
验证请求,并将用户重定向到登录页面。我使用的是一个自定义身份验证提供程序,因此我最终使用了303重定向,而不是403失败(或者更恰当地说,401未经授权),以使它与我的OAuth样式的提供程序一起工作
this.GlobalRequestFilters.Add((req, res, requestDto) =>
{
if (!req.IsAuthenticated() && !(requestDto is Authenticate))
{
res.RedirectToUrl("/auth/aadgraph?redirect=" + req.RawUrl.UrlEncode());
res.EndRequest();
}
});
快速的实验表明,全局过滤器不会拾取静态内容。我将如何(选择性地)过滤该内容?@jklemmack您可以使用PreRequestFilters
,请参阅我的更新答案。全局请求筛选器可能允许验证请求。再说一次,最安全的系统是一个没有人可以访问的系统:)
this.GlobalRequestFilters.Add((req, res, requestDto) =>
{
if (!req.IsAuthenticated() && !(requestDto is Authenticate))
{
res.RedirectToUrl("/auth/aadgraph?redirect=" + req.RawUrl.UrlEncode());
res.EndRequest();
}
});