Spring Security sessionID作为令牌配置



我正在使用SpringSecurity+Spring会话实现一个登录过程,为需要创建/维护会话的类似REST的后端服务构建登录功能。

我不确定我是否以正确的方式处理该解决方案,因为我使用自定义端点手动创建会话。也许会话创建需要在Authorization方法本身中完成?或者有一种方法可以让spring在后端进行一些请求验证后创建会话?我正在为此使用自定义筛选器和提供程序。

另外,对于我当前的配置,我遇到了一个问题,因为后端API正在为每个请求创建一个新的会话,即使它应该返回401。

该解决方案的要求如下:

  1. 客户端将登录到第三方身份验证/授权提供商。验证后,提供者将发布访问令牌
  2. API必须向第三方提供商验证客户端的访问令牌。验证后,API必须创建一个会话,并向客户端返回一个新的令牌(或sessionID(
  3. 未来对API的调用应该在头/cookie中包含令牌(或sessionID(,以便API获取客户端的会话

这里的大问题是:使用链接到用户会话的基于令牌的身份验证有一种通用方法吗?如果是这样的话,如果我需要在spring-session创建会话之前进行自定义验证,并向该会话添加自定义属性,该怎么办?

我的代码位于此处: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-token:调用另一个端点

注意,x-auth-token会在响应中刷新。(意味着创建了一个新会话-这是我们想要避免的,当响应为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"}

附言:我不确定是否允许我提供一个链接到堆栈溢出中的代码。如果没有,我也可以在这里粘贴代码。

非常感谢!

根据您的需求,OpenID Connect可用于对最终用户进行身份验证并授权客户端,然后客户端将收到AccessToken。然后CCD_ 2可以用于调用后端API(资源服务器(。

看看这个示例/指南,了解如何在SpringSecurity5中针对外部OAuth2.0或OpenIDConnect提供程序设置登录。这将满足您使用外部提供程序登录应用程序并在SpringSecurity中创建安全会话的要求。

现在您已经登录到应用程序,并且客户端有一个AccessToken,客户端可以在请求(授权头(中使用该AccessToken来调用后端API(资源服务器(。应设置资源服务器以验证传入的AccessToken。看看这个示例(master和jwt支持分支(,了解如何配置资源服务器。

我强烈建议您更加熟悉OAuth 2.0授权框架和OpenID Connect Core 1.0。

祝你好运!

最新更新