【发布时间】:2020-12-23 08:35:46
【问题描述】:
我们的服务架构目前仅支持客户端身份验证。基于 Spring Boot 的 Java 服务和 Spring Security 问题长期存在的基于租户的 JWT,以便其他服务相互进行身份验证。例如,渲染服务需要从模板服务中获取模板。 我们现在想要使用 node.js 构建一个用户服务,它为用户颁发短期令牌以访问其中一些服务,并且只访问用户可见的资源。例如,用户只想在列表中看到他们的模板。
我的问题是:在用户服务上实现 /auth 资源时需要注意什么?我已经设法在用户服务中发布了一个包含所需信息和显然相同秘密的 JWT,以访问模板服务。但我不确定它是否足够安全。我必须向用户 JWT 添加一个随机 JID 以使其被模板服务接受(这也是用 spring boot 实现的)。
是否有我需要注意的安全问题?这种做法是否幼稚?
这是我发出 JWT 的 javascript 代码:
const jwt = require('jwt-simple');
const secret = require('../config').jwtSecret;
const jti = require('../config').jti;
// payload contains userId and roles the user has
const encode = ({ payload, expiresInMinutes, tenantId}) => {
const now = new Date();
payload.jti = jti; // this is a UUID - spring security will otherwise not accept the JWT
payload.client_id = tenantId; // this is required by the template service which supports tenants identified through their clientId
const expiresAt = new Date(now.getTime() + expiresInMinutes * 60000);
payload.expiresAt = expiresAt;
return jwt.encode(payload, secret);
};
我想给用户JWT添加一些类型信息,这样那些不允许任何用户访问的java服务可以直接拒绝所有用户JWT的访问。或者我可以在这里使用 JTI?将研究弹簧靴如何处理。我可能还必须为所有允许用户访问某些资源的服务添加具有角色区分的@Secured。
但这些都是技术细节。我真正担心的是,我不确定使用从不同来源发布的 JWT 的整个概念是否足够安全,或者我必须在用户服务中做什么才能做到这一点。
【问题讨论】:
-
我不清楚用户服务的同一秘密部分。哪些秘密是相同的?模板服务如何解码用户服务下发的JWT?
标签: node.js security jwt jwt-auth