我正在为SAML Assertion Flow到Salesforce的快速网关开发自定义策略。将策略放在express-gateway中,将使用户和通过Express-gateway身份验证的应用程序也可以自动通过Salesforce进行身份验证,而不会给客户端应用程序带来任何麻烦。
为防止在每次获取Salesforce令牌的请求上重新执行SAML断言流程,我们可以在快速网关中存储和重复使用Salesforce OAuth令牌。
因此,使用此策略通过快速网关公开的Salesforce API的基本流程为:
最困难的部分是要重新使用的商店令牌。我的想法是将配置从egContext传递到策略中。该策略可以获取Redis配置选项,然后我可以使用Redis重新保存令牌以及其他信息,例如:
const tokenKey = db.options.namespace.concat('-access-token:', req.user.token.id);
const consumerTokensKey = db.options.namespace.concat('-consumer-access-tokens:', req.user.token.consumerId);
db.multi()
.hmset(tokenKey, req.user.token)
.hset(consumerTokensKey, req.user.token.id, req.user.token.expiresAt)
.exec();
然后它将始终在前进的req.user.token上可用。唯一的问题是,该配置不打算像对Github issue #830
的响应中提到的那样成为公共API。我的问题是,在这里实现目标的更好方法是什么?