我正在使用微服务架构构建新的Java应用程序,并且必须处理跨不同服务的用户身份验证 . 我看到了解决这个问题的两种主要方法:

1) Spring OAuth2 + Spring cloud security 在每个请求的Authorization标头中使用Oauth标记 . 令牌由单独的身份验证服务生成/验证 . 在每个请求中,我然后能够获得具有用户身份和分配角色的身份验证主体,以便调用其他服务我只使用Oauth2RestTemplate自动传播授权头 .

2) Spring Session + Spring security 将身份验证保存在会话中,然后将其存储在Redis(或其他位置)并按会话ID键入 . 在这种情况下,代替Authorization标头客户端将具有会话cookie,每个微服务将有权访问此会话和身份验证主体 . 's no ready-made restTemplate to propagate session cookie though, but it'只需几行代码,而不是决定因素 .

这两种解决方案都运行良好,如果有会话(每次从Redis中提取),OAuth2的好处是什么呢?

在构建独立于语言的解决方案时,似乎OAuth2方法可能更为可取,而Spring会话仅适用于Java微服务 .

有人可以解释基于令牌的身份验证的其他好处吗?