【问题标题】:Spring Security OAuth2 store access_token in cookieSpring Security OAuth2 将 access_token 存储在 cookie 中
【发布时间】:2019-06-03 00:48:08
【问题描述】:

我使用Spring Security + Angular。当我向/oauth/token 发出发布请求并获取令牌时:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDY5NDQwODYsInVzZXJfbmFtZSI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BRE1JTiJdLCJqdGkiOiI4M2VhMTA1MC05NjczLTRlZGItOTlmMS0yNWIzOTQ1ODdjMmUiLCJjbGllbnRfaWQiOiJmcm9udGVuZCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSJdfQ.i6v2G70eEgGUt_CdgctcTrGgz_RHs6OuEA8lGHOgVro",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSJdLCJhdGkiOiI4M2VhMTA1MC05NjczLTRlZGItOTlmMS0yNWIzOTQ1ODdjMmUiLCJleHAiOjE1NDk1MzI0ODYsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiNzQxMDA0NzUtODkxOC00YjM5LTk5NDMtNjAzMWIxMGVjNGQ3IiwiY2xpZW50X2lkIjoiZnJvbnRlbmQifQ.3QOdAL10lQsPSvsFfgyf02gvAanyJ-R1BX_wtF1APB0",
    "expires_in": 3599,
    "scope": "read write",
    "jti": "83ea1050-9673-4edb-99f1-25b394587c2e"
}

如何在Spring Security 端指定cookie 的安装并在那里保存令牌?还是我必须像这样在Angular 一侧这样做:

Cookie.set("access_token", token.access_token, expireDate);

什么是正确的做法?在我看来,将令牌存储在 cookie 中是一个正确且安全的决定。

【问题讨论】:

    标签: angular cookies spring-security spring-security-oauth2


    【解决方案1】:

    访问令牌适用于执行休息调用的用户代理。他们可以安全地存储访问令牌(大多数在安全服务器的内存中进行),并在每次调用时将该令牌传递给服务器。

    话虽如此,您的应用程序不应获取该令牌并以 cookie 的形式将其发送到浏览器。

    如果您使用的是implicit_grant,那么您的应用程序已被视为安全性较低,因为获取令牌不需要客户端凭据。

    在这种情况下,我建议将其保存在应用程序的内存中。如果应用程序必须存储它(以防止重新加载等),请考虑使用local session storage

    最坏的情况local storage 将在浏览器关闭后继续存在。

    但我认为您在这里不需要 cookie。因为令牌是使用带有 bearer prefix 的授权标头传递给 API 的

    Authorization: Bearer AbCdEf123456
    

    希望对你有帮助

    【讨论】:

    • 感谢您的回复。但我仍然不明白使用Angular 前端时存储访问令牌的最佳做法。
    • 您将其存储在您的 javascript 应用程序的内存中。 var token = ...; 然后在每个请求中传递它。我确信一些 javascript 框架已经为你做到了。
    • 不要将令牌存储在本地存储中,这是一个安全问题。
    • 你能检查一下my question related to this subject吗?
    猜你喜欢
    • 2018-07-04
    • 2012-12-19
    • 2019-09-25
    • 2019-11-19
    • 1970-01-01
    • 2020-12-12
    • 2019-12-07
    • 2016-02-26
    • 2021-11-21
    相关资源
    最近更新 更多