将自定义身份验证策略添加到 Feathers 应用程序的正确方法是什么?



我的羽毛应用程序需要能够有两个JWT身份验证策略。例如,对于users服务,我需要在我的钩子中all: [authenticate('carrier')]而不是all: [authenticate('jwt')]。对于其余服务,需要authenticate['jwt']

为此,我在身份验证中注册了一个自定义策略.js称为CarrierStrategy,如下所示:

module.exports = function auth(app) {
const authentication = new AuthenticationService(app)
// register all of the strategies with authentication service
authentication.register('carrier', new CarrierStrategy())
authentication.register('jwt', new JWTStrategy())
// register the authentication service with your app
app.use('/api/authentication', authentication)
}

在config/default.json中,我也注册了这个策略,如下所示:

authStrategies: ["carrier", "jwt"]

CarrierStrategy 需要使用一些自定义逻辑以稍微不同的方式处理传入的授权标头。

当我使用 Postman 发送对此服务的请求时,即在标头中使用 JWT 令牌localhost:3030/users,我收到以下错误。

Invalid authentication information (strategy not allowed in authStrategies)'

如果这是向应用程序添加自定义策略的正确方法,请指导我。

我有一个类似的问题。我想要有状态和无状态 JWT 身份验证。问题是,如果您只是在身份验证中执行此操作.js

authentication.register('jwt', new JWTStrategy());
authentication.register('jwt-stateless', new JWTStrategy());

然后,当您使用 JWT 令牌提交请求时,它将与任何一个令牌匹配,并且您最终会在某个地方的某个服务中出现问题。

我最终在身份验证中创建了一个这样的自定义策略.js:

class StatelessJWTStrategy extends JWTStrategy {
get configuration () {
const authConfig = this.authentication.configuration;
const config = super.configuration;
return {
...config,
entity: authConfig.entity,
service: authConfig.service,
header: 'Authorization',
schemes: [ 'STATELESS' ]
};
}
}

它基本上是一个稍微修改的 JWTStrategy,它在授权标头中使用 STATELESS 而不是 Bearer 或 JWT。这不是一个很好的解决方案,但它有效。

然后我也在身份验证中这样做了.js

authentication.register('jwt', new JWTStrategy());
authentication.register('jwt-stateless', new StatelessJWTStrategy());

然后你需要修改你的config.json文件。在身份验证部分添加以下内容:

"jwt-stateless": {
"entity": null
},
"jwt": {
"entity": "user",
"service": "users"
},
"entity": "user",
"service": "users",
"authStrategies": [
"jwt-stateless",
"jwt",
"local"
],

现在你应该能够在钩子中使用 jwt 无状态身份验证机制,如下所示:

authenticate('jwt-stateless')

前往此处创建无状态 JWT。在 iss 中填写发行方和 aud 中的受众详细信息,并将用户 ID 添加到子字段中。在底部的签名验证字段中从 config.json 弹出您的密钥,左侧的令牌应该进行身份验证。

相关内容

最新更新