Javascript Passport.js使用客户端id和客户端密码的目的是什么?

Javascript Passport.js使用客户端id和客户端密码的目的是什么?,javascript,node.js,authentication,oauth-2.0,passport.js,Javascript,Node.js,Authentication,Oauth 2.0,Passport.js,我正在用Passport.js实现OAuth2资源所有者密码凭证授权和API的OAuth2客户端密码策略,但是我不知道客户端id和客户端scret应该是什么?资源所有者密码凭据的授予权限为: 客户端通过添加 以下参数使用“application/x-www-form-urlencoded” 按照附录B的格式,在HTTP中使用UTF-8字符编码 请求实体机构: grant_类型 REQUIRED. Value MUST be set to "password". 用户名 REQ

我正在用Passport.js实现OAuth2资源所有者密码凭证授权和API的OAuth2客户端密码策略,但是我不知道客户端id和客户端scret应该是什么?资源所有者密码凭据的授予权限为:

客户端通过添加 以下参数使用“application/x-www-form-urlencoded” 按照附录B的格式,在HTTP中使用UTF-8字符编码 请求实体机构:

grant_类型

    REQUIRED.  Value MUST be set to "password".
用户名

    REQUIRED.  The resource owner username.
密码

    REQUIRED.  The resource owner password.
范围

    OPTIONAL.  The scope of the access request as described by
     Section 3.3.
但是Passport.js策略被记录如下:

passport.use(new ClientPasswordStrategy(
  function(clientId, clientSecret, done) {
    Clients.findOne({ clientId: clientId }, function (err, client) {
      if (err) { return done(err); }
      if (!client) { return done(null, false); }
      if (client.clientSecret != clientSecret) { return done(null, false); }
      return done(null, client);
    });
  }
));

所以我的问题是,如果规范没有说明需要客户端id或客户端机密,为什么oauth2客户端密码策略使用客户端id和机密id?

我猜现在你已经知道了,但我想我还是要添加一个答案

  • ClientId是要与数据库匹配的id
  • ClientSecret是将与数据库中的哈希或加密密码进行比较的密码
示例代码:

    Client.verify = function(clientId, secret, next){

    this.getByClientId(clientId, function(err, client){

    if(err) {
        return next(err);
    }

    if(!client){
        return next(null, false);
    }

    SecurityUtil.compare(secret, client.hash, function(err, result){

        if(err){
            return next(err);
        }

        next(null, result);

    });

    });

    };

格伦,你解决过这个问题吗?我现在也在想同样的事情。规范不需要客户id或客户机密,所以我想知道为什么这个策略需要。老实说,我已经记不清这个问题的依据了。正如我现在看到的,clientId和clientSecret只是任意的参数名,可以很容易地改为用户名和密码。有这么多passport模块,如果有一些复制/粘贴,我不会感到惊讶,这可能解释了为什么回调参数有一些奇怪的名称。这有帮助吗,还是我完全没有抓住要点?(如果是的话,很抱歉,我已经有一段时间没有读过关于auth和Passportjs的文章了)它们似乎是武断的,但该策略实际上检查了尸体上是否同时存在clientId和clientSecret。无论如何,我都能解决这个问题。尽管如此,我仍然对这些检查的存在感到困惑。在研究相同的东西时,我发现了一个很好的代码示例(Node.js),它提供了一个可能有用的工作模型-对。我记不清我为什么问这个问题了。现在看来这很有道理。谢谢你的回答。如果其他人陷入困境,这可能会有所帮助。