servicestack,Authentication,servicestack" /> servicestack,Authentication,servicestack" />

Authentication 要求使用ServiceStack对(几乎)每个请求进行身份验证

Authentication 要求使用ServiceStack对(几乎)每个请求进行身份验证,authentication,servicestack,Authentication,servicestack,我正在使用ServiceStack构建一个ERP,并已连接身份验证并正在工作。但是,我希望基本上在每个路由、DTO或静态页面上都需要身份验证—除了登录页面和支持资源(CSS、图像) 有没有一种简单、集中的方法来做到这一点?我可以对每个DTO/路由应用[Authenticate],但很容易错过一个 如何要求对所有请求进行身份验证,并保存一些请求?我怀疑a是某种形式的,但我不确定如何开始。对,最简单的方法是使用: 这将确保所有服务请求都经过身份验证,为了验证ServiceStack处理的非服务请求是

我正在使用ServiceStack构建一个ERP,并已连接身份验证并正在工作。但是,我希望基本上在每个路由、DTO或静态页面上都需要身份验证—除了登录页面和支持资源(CSS、图像)

有没有一种简单、集中的方法来做到这一点?我可以对每个DTO/路由应用
[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();
    }
});