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

Mag*_*gge 10 .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() })
);
Run Code Online (Sandbox Code Playgroud)

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

Parital request + response示例:

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
Run Code Online (Sandbox Code Playgroud)

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

myt*_*thz 22

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

Plugins.Add(new AuthFeature(...) { HtmlRedirect = null });
Run Code Online (Sandbox Code Playgroud)

这将回退到401 UnAuthorized其他Content-Types获得的标准Response.

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

[Authenticate(HtmlRedirect="~/path/to/redirect/to")]
Run Code Online (Sandbox Code Playgroud)

  • 我无法让它工作,我试图将它设置为null,到其他路径,我尝试了两个选项(当创建新的AuthFeature并在[Authenticate(HtmlRedirect = ..)]属性中.它仍然重定向到登录?..如果您碰巧知道发生了什么,请告诉我,同时我将继续调试SS源代码. (4认同)