【问题标题】:How do I store an OWIN OAuth 2 access_token in an HttpOnly Secure cookie?如何将 OWIN OAuth 2 access_token 存储在 HttpOnly Secure cookie 中?
【发布时间】:2020-12-12 13:21:57
【问题描述】:
【问题讨论】:
标签:
security
cookies
oauth-2.0
owin
bearer-token
【解决方案1】:
服务器端架构
OWIN 堆栈会将您绑定到基于 cookie 的安全性,并像这样工作。这可能非常适合您的要求:
- Web UI 对 Web 后端进行 Ajax 调用并隐式发送 auth cookie
- Web UI 仅限于调用同一域中的 Web 后端
- Web 后端从 cookie 获取访问令牌
- Web 后端将访问令牌转发到不同域中的 API
- API 验证访问令牌
this thread 中演示了一种常用方法,其中令牌包含在 auth cookie 中,Web 后端从令牌中解压缩 cookie。
var id = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType);
id.AddClaim(new Claim("access_token", tokenResponse.AccessToken));
id.AddClaim(new Claim("refresh_token", tokenResponse.RefreshToken));
id.AddClaim(new Claim("id_token", n.ProtocolMessage.IdToken));
要求?
我总是建议从目标/要求开始,而不是从微软等供应商的技术开始,这通常有点陈旧或不理想。
客户端架构
如果您想在客户端做更多事情,那么另一种方法是使用 SPA 架构并在 Javascript 中做更多事情:
- 使用诸如oidc-client之类的库
- 直接向跨域 API 发送访问令牌
- 考虑仅将令牌存储在浏览器内存中而不是本地存储中
如果您对这种方法在您的未来规划方面感兴趣,那么我的以下 2 篇文章是一个很好的起点:
无论如何,如果其中任何一个有用,请随时发布后续问题。