首页 > 解决方案 > 需要对(几乎)每个使用 ServiceStack 的请求进行身份验证

问题描述

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

有没有一种简单、集中的方式来做到这一点?我可以申请[Authenticate]每条 DTO/路线,但很容易错过一个。

我如何要求对所有请求进行身份验证,节省一些?我怀疑某种形式的全局请求过滤器,但我不知道如何开始。

标签: authenticationservicestack

解决方案


@mythz 的解决方案是最正确的,但在我的情况下,我有一些我最初没有询问的特定附加标准。也就是说,我想允许Authenticate请求,并将用户重定向到登录页面。我正在使用自定义身份验证提供程序ServiceStack.Authentication.Azure,因此我最终得到了 303 Redirect 而不是 403 Fail (或更恰当地说,401 Unauthorized),以使其与我的 OAuth 样式提供程序一起使用。

this.GlobalRequestFilters.Add((req, res, requestDto) =>
{
    if (!req.IsAuthenticated() && !(requestDto is Authenticate))
    {
        res.RedirectToUrl("/auth/aadgraph?redirect=" + req.RawUrl.UrlEncode());
        res.EndRequest();
    }
});

推荐阅读