gpt4 book ai didi

rest - 这是对 ServiceStack 的每次调用进行无状态身份验证的正确方法吗?

转载 作者:行者123 更新时间:2023-12-02 00:13:38 25 4
gpt4 key购买 nike

我有 REST 服务要求,其中有些调用需要身份验证,有些则不需要。绝对不使用状态,因为调用都是相互独立的。我已经将一些似乎有效的东西放在一起,但这是不使用 session 的正确方法吗?

这个问题与我的 WCF 问题有点相关,已回答 here .

首先我注册了认证方式:

        Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new CustomCredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
}
));

然后我将相应的调用(或服务或 DTO)归因于 Authenticate 属性:

[Authenticate]
public HelloResponse Post(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name + " with POST & Auth"};
}

我继承自执行身份验证的 BasicAuthProvider 类:

public class CustomCredentialsAuthProvider : BasicAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
return userName == "dylan" && password == "abc123";
}

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.IsAuthenticated = true;

//Important: You need to save the session!
authService.SaveSession(session, new TimeSpan(0,0,10));
}
}

如您所见,我确实保存了 session ,但它在 10 秒后超时。这是我确信可以做得更好的部分。它似乎工作得很好。

有没有更好的方法来完成我想要完成的事情?由于这些服务的无 session 性质,还有什么方法可以删除 Auth、AssignRoles 和 UnassignRoles 方法吗?

最佳答案

如果您想继续使用 ServiceStack's AuthenticationSession支持你可以只添加一个响应过滤器,在服务执行后清除用户 session ,例如:

this.ResponseFilters.Add((req, res, dto) => req.RemoveSession());

基本上在执行每个请求后,它会清除 session ,因此不存在已通过身份验证的记录。

否则,您可以完全跳过使用 ServiceStack 的身份验证,只需通过 RequestFitlers 提供您自己的身份验证即可。的 FilterAttributes (这实际上是 SS Auth 在幕后所做的)。

关于rest - 这是对 ServiceStack 的每次调用进行无状态身份验证的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com