ServiceStack身份验证失败时,不重定向?

时间:2012-10-25 09:13:24

标签: .net authentication servicestack

我们正在构建一个使用基本身份验证的ServiceStack API。我目前在AppHost中设置了auth,如下所示:

var authDb = new OrmLiteConnectionFactory("Server=(...);", true, MySqlDialectProvider.Instance);

var authRepo = new OrmLiteAuthRepository(authDb);
authRepo.CreateMissingTables();
container.Register<ICacheClient>(c => new MemoryCacheClient());
container.Register<IUserAuthRepository>(c => authRepo);

Plugins.Add(
    new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new BasicAuthProvider() })
);

当执行没有授权标头或错误用户名的请求时+传递响应是重定向到/Account/Login.aspx?ReturnUrl = ...

Parital request + response example:

POST http://localhost:60278/reserve HTTP/1.1

HTTP/1.1 302 Found
Location: /Account/Login.aspx?ReturnUrl=%2freserve
X-Powered-By: ServiceStack/3,924 Win32NT/.NET

有没有办法让它只响应HTTP 401 Unauthorized或HTTP 403 Forbidden?

2 个答案:

答案 0 :(得分:22)

默认情况下,ServiceStack的AuthFeature只会尝试将您重定向到 HTML 内容类型请求的默认~/login路径。您可以通过将AuthFeature中的重定向路径设置为null来覆盖它:

Plugins.Add(new AuthFeature(...) { HtmlRedirect = null });

这将回退到其他内容类型获得的标准401 UnAuthorized响应。

在将HtmlRedirect全局设置为null后,您可以在adhoc的基础上将其添加回来,例如:

[Authenticate(HtmlRedirect="~/path/to/redirect/to")]

答案 1 :(得分:1)

如果以下操作无效:

º£}@m

尝试将Plugins.Add(new AuthFeature(...) { HtmlRedirect = null }); 设置为提供者。这适用于OverrideHtmlRedirect = false-尤其适用于JWT承载身份验证

NetCoreIdentityAuthProvider

如果其他所有方法均失败,请检查Github代码以查看是否有强制执行html重定向