我们正在构建一个使用基本身份验证的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?
答案 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重定向