我正在实现一个使用Spring Security + Spring会话的登录过程来为需要创建/维护会话的后端服务的REST构建登录功能。Spring安全会话ID作为令牌配置
我不知道我是否正确地接近解决方案,因为我正在使用自定义端点手动创建会话。也许会话创建需要在授权方法本身完成?或者也许有一种方法可以在后端的一些请求验证之后让spring创建会话?我正在使用自定义过滤器和提供程序。
我目前的配置另外,我有一个问题,因为后端API与每个请求创建一个新的会话,即使它应该返回401
该解决方案的要求如下:
- 客户端将登录到第三方认证/授权提供商。验证通过后,提供者将发出访问令牌。
- API必须验证客户端的访问令牌与第三方提供商。验证后,API必须创建一个会话并向客户端返回一个新的令牌(或会话ID)。
- 未来对API的调用应该在标头/ cookie中包含令牌(或sessionID),以便API获取客户端的会话。
最大的问题在这里:是否有遵循使用链接到用户会话令牌基于身份验证的常用方法?如果是这样,如果我在春季会话创建会话之前需要进行自定义验证,并且向此会话添加自定义属性?
我的代码位于:https://github.com/munilvc/api-session/tree/master/src/main/java/com/munilvc/poc/security
例如,一些执行示例:
1)执行自定义登录:
$ curl -X POST http://localhost:8080/app-api/login/createsession -v
> POST /app-api/login/createsession HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200
< x-auth-token: 15a06ce8-5b34-401a-a05f-a0d933926245
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 29 Aug 2017 01:28:24 GMT
<
171{"username":"username1"}
2)调用另一个端点提供X-auth-令牌:
注意x-auth令牌在响应中被刷新。 (指创建一个新的会话 - 这是我们希望避免,这也发生在响应401)
$ curl -X GET http://localhost:8080/app-api/accounts/2 -H "x-auth-token:15a06ce8-5b34-401a-a05f-a0d933926245" -v
> GET /app-api/accounts/2 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.49.1
> Accept: */*
> x-auth-token:15a06ce8-5b34-401a-a05f-a0d933926245
>
< HTTP/1.1 200
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< x-auth-token: 42a5db80-e5e1-4127-bd85-e468af4a8fb2
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 29 Aug 2017 01:29:08 GMT
<
870{"id":3,"name":"Account 3"}
PS:我不知道如果我允许提供一个链接到堆栈中的代码溢出。如果没有,我也可以在这里粘贴代码。
非常感谢!