使用 NodeJS,如何使用 Spring Security OAuth2 制作的 JWT 检索存储在 PostgreSQL 中的会话信息?
Posted
技术标签:
【中文标题】使用 NodeJS,如何使用 Spring Security OAuth2 制作的 JWT 检索存储在 PostgreSQL 中的会话信息?【英文标题】:Using NodeJS, how can I retrieve session information stored in PostgreSQL using the JWT made by Spring Security OAuth2? 【发布时间】:2018-11-23 17:49:59 【问题描述】:我有一个 Java spring 后端,它使用 LDAP 作为用户帐户,使用 spring-security 进行身份验证。
我还使用 spring-security-oauth2 进行客户端身份验证,并且我有一个使用 JWT 进行身份验证的客户端。
使用该 JWT,我如何使用 NodeJS 解密 JWT 并在我的数据库中检索会话信息(用户和角色)?
我还有一个X-XSRF-TOKEN
我想我需要验证(cookie)。
有可能吗?
【问题讨论】:
【参考方案1】:我有一个 Java spring 后端,它使用 LDAP 作为用户帐户,使用 spring-security 进行身份验证。
我还使用 spring-security-oauth2 进行客户端身份验证,并且我有一个使用 JWT 进行身份验证的客户端。
JWT 的整体理念是它是无状态的(无会话)。如果您有一个独特的解决方案,其中会话以某种方式与 JWT 相关联,您应该包含图表或更多描述。
使用该 JWT,我如何使用 NodeJS 解密 JWT 并在我的数据库中检索会话信息(用户和角色)?
您可以使用JsonWebToken library 并在主题字段中存储/检索用户名(或其他类型的用户或会话标识令牌)。
我还有一个 X-XSRF-TOKEN 我想我需要验证(cookie)。
CSRF/XSRF 通常在 JWT 应用程序中被禁用(请参阅此处接受的答案CSRF Token necessary when using Stateless(= Sessionless) Authentication?)。在 Spring Boot 中,中间件默认启用,但可以像这样禁用:
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.csrf().disable();
【讨论】:
I wonder, why would you decode the token in NodeJs if you actually need to work with it in the backend?
NodeJS 是一个后端,我想用 nodejs 扩展后端并使用相同的用户和权限,现在对你来说更有意义吗?
我用更相关的 NodeJs 库更新了我的回复。
jwt 与会话无关,但需要会话才能获取 JWT。但现在我记得你只需要它来获取 JWT。我想知道因为 JWT 包含角色和用户,我如何验证 JWT 没有被修改(在节点内)?
@BigDong 在我看来 JWT,需要会话来获取 JWT 仍然没有意义。 JWT 通常在每个请求的请求头中传递,这使得它适用于无状态操作。 JWT 由服务器使用安全密码发出。除非攻击者掌握了该密码,否则他们应该无法修改令牌。我建议阅读一下 JWT 的原理jwt.io/introduction
@BigDong 在这里阅读:***.com/questions/27301557/…以上是关于使用 NodeJS,如何使用 Spring Security OAuth2 制作的 JWT 检索存储在 PostgreSQL 中的会话信息?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring sec 中为组使用属性:hasAnyRole 的授权标签
如何在 Spring Security thymeleaf sec 中使用列表:授权标签
如何在 Spring Security 的同一个请求中使用两个身份验证提供程序?
Spring Security sec:使用 Java Config 授权标签