Passport.js使用client_id和client_secret做什么用途?

时间:2014-02-21 00:17:35

标签: javascript node.js authentication oauth-2.0 passport.js

我正在使用Passport.js和API的oauth2-client-password策略实现OAuth2资源所有者密码凭据授权,但我对于client_id和client_scret应该是什么感到困惑?资源所有者密码凭据授权的specs说:

  

客户端通过添加来向令牌端点发出请求      以下参数使用“application / x-www-form-urlencoded”      每个附录B的格式,HTTP中的字符编码为UTF-8      请求entity-body:

     

grant_type

    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);
    });
  }
));

所以我的问题是,如果规范没有说明需要client_id或client_secret,为什么oauth2-client-password策略使用client_id和secret_id?

1 个答案:

答案 0 :(得分:1)

我猜你现在已经有了这个,但我想我还是会添加一个答案。

  • 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);

    });

    });

    };