gpt4 book ai didi

authentication - 基于 cookie 的 session /身份验证的替代方案

转载 作者:行者123 更新时间:2023-12-04 06:40:12 25 4
gpt4 key购买 nike

servicestack中的 session 功能插件是否有替代品?在某些情况下,我无法使用 cookie 来匹配我的服务实现中的授权 session 。是否有可能使用请求的 http header 中的 token 来解析 session ?如果浏览器阻止 cookie,首选的解决方案是什么?

最佳答案

我正在使用没有内置身份验证和 session 提供程序的 ServiceStack。

我使用属性作为请求过滤器来从 cookie、请求 header 或字符串参数中收集用户信息(id 和 token )。
您可以在用户登录后提供此信息。您在响应中附加一个新的 cookie,并在呈现 View 时在客户端注入(inject) id 和 token 信息,因此您可以将其用于 http header 和链接的查询参数。

public class AuthenticationAttribute : Attribute, IHasRequestFilter 
{
public void RequestFilter(IHttpRequest request, IHttpResponse response, object dto)
{
var userAuth = new UserAuth { };
if(!string.IsNullOrWhiteSpace(request.GetCookieValue("auth"))
{
userAuth = (UserAuth)request.GetCookieValue("auth");

}
else if (!string.IsNullOrEmpty(request.Headers.Get("auth-key")) &&
!string.IsNullOrEmpty(request.Headers.Get("auth-id")))
{
userAuth.Id = request.Headers.Get("id");
userAuth.Token = request.Headers.Get("token");
}
authenticationService.Authenticate(userAuth.Id, userAuth.token);
}
public IHasRequestFilter Copy()
{
return new AuthenticationAttribute();
}
public int Priority { get { return -3; } } // negative are executed before global requests
}

如果用户未获得授权,我会在此时重定向他。

我的项目支持 SPA。如果用户使用 xmlhttprequests 使用 API,则身份验证内容通过 header 完成。我在页面加载时将这些信息注入(inject)到 AngularJS 中,并在所有请求(部分 View 、api 消耗等)上重用它。 ServiceStack 对这种类型的东西非常强大,您可以轻松地配置您的 AngularJS 应用程序和 ServiceStack View 引擎以并行工作,验证每个请求,全局化您的应用程序等。

如果您没有 cookie 并且请求不是由 javascript 调用的,您可以支持没有 cookie 的身份验证,如果您始终生成将 id 和 token 作为查询参数传递的链接,并通过表单上的隐藏输入传递它们,例如例子。

关于authentication - 基于 cookie 的 session /身份验证的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16690758/

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