我从安全角度理解 Set-Cookie 响应标头值的 httponly 标志的概念并防止 XSS 攻击。
我不明白的是,ServiceStack 对保存 bearerToken 的“ss-tok”cookie 做了什么。
根据服务堆栈文档 http://docs.servicestack.net/jwt-authprovider#request-jwt-cookie-is-set-on-authentication我可以通过发出无状态 JWT Cookie 转换为无状态会话,如下所示:
var authResponse = client.Send(new Authenticate {
provider = "credentials",
UserName = username,
Password = password,
UseTokenCookie = true
});
UseTokenCookie 设置为 true。成功验证后会创建 httponly“ss-tok”cookie。
然而,我似乎无法使用这个以“ss-tok”名称存储的令牌 cookie 做任何事情。显然我无法用 Javascript 检索它,而且我似乎无法将其发送出去JsonServiceClient
要求。
我的 ServiceStack 资源微服务在任何安全请求中都不会收到“ss-tok”的值。我必须为任何安全请求显式设置 bearerToken 。
我必须显式传递不记名令牌或用我的刷新令牌JsonServiceClient
如中所述关于此事的 ServiceStack 文档 https://github.com/ServiceStack/servicestack-client#authenticating-using-jwt.
我一定做错了什么,我以为这个文档 http://docs.servicestack.net/jwt-authprovider#sending-jwt-using-cookies是我缺少的部分,这里的代码:
var client = new JsonServiceClient(baseUrl);
client.SetCookie("ss-tok", jwtToken);
但这段代码实际上没有任何意义,因为“ss-tok”的值没有发送到我的资源微服务,我必须像我之前所说的那样显式设置 bearerToken 值:
var client = new JsonServiceClient(baseUrl);
client.bearerToken = jwtToken;
这意味着我必须将 jwtToken 存储在我自己的 cookie 值中,因为我的应用程序需要在应用程序的不同区域创建 JsonServiceClient 的多个实例。