如何解决如何将OWIN OAuth 2 access_token存储在HttpOnly Secure cookie中?
我的主要目标是正确保护一系列Web API控制器。到目前为止,我已经使用OWIN生成access_tokens并通过使用[Authorize]装饰一个类,然后使用在标头中包含Bearer令牌的jQuery ajax调用来对其进行测试,以测试该功能。这似乎是正确的路径,但是我已经阅读了本地存储并不安全。相反,标记为HttpOnly和Secure的cookie似乎是最受欢迎的解决方案。
我已经发现人们在使用本地存储,甚至是遍历:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api
我无法找到的是如何配置OWIN以使用cookie来存储令牌。
解决方法
服务器端架构
OWIN堆栈将使您与基于cookie的安全性联系在一起,并且可以这样工作。可能这很适合您的要求:
- Web UI对Web后端进行Ajax调用并隐式发送auth cookie
- Web用户界面仅限于在同一域中调用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));
要求?
我总是建议从目标/要求开始,而不是从诸如Microsoft之类的供应商那里获得技术,这通常会有些陈旧或次优。
客户端侧面架构
如果您想在客户端上做更多的事情,那么另一种方法是使用SPA架构并用Javascript做更多的事情:
- 使用诸如oidc-client 之类的库
- 直接将访问令牌发送到跨域API
- 考虑仅将令牌存储在浏览器内存中,而不是在本地存储中
如果对您的未来计划感兴趣,那么我的这2个帖子是一个不错的起点:
无论如何,如果有任何用处,请随时发布后续问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。