Spring Security OAuth2在cookie中存储access_token

时间:2019-01-08 10:31:52

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

我使用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中是正确且安全的决定。

1 个答案:

答案 0 :(得分:1)

访问令牌供执行休息呼叫的用户代理使用。他们可以安全地存储访问令牌(大多数情况下,将其存储在安全服务器上的内存中),并将每次访问时将该令牌传递给服务器。

也就是说,您的应用程序不应使用该令牌并将其以Cookie的形式发送到浏览器。

如果您使用的是implicit_grant,则您的应用程序被认为是安全性较低的,因为不需要客户端凭据即可提取令牌。

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

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

但我认为您不需要在这里使用cookie。因为令牌是通过带有Authorization: Bearer AbCdEf123456

的授权标头传递给API的,
UINT16 myarray[] = { 0,1,2,3,4,5,6, ..., n };
std::vector<UINT16> myvect(myarray[3], myarray[3] + 16);

希望这会有所帮助