19

APIを公開するアプリを書いています。このアプリケーションを使用すると、ユーザーはワークスペースを作成してユーザーを追加できます。各ユーザーは一意のトークンを持ちます。API呼び出しを行うとき、そのトークンを使用します(これにより、そのワークスペースを使用しているユーザーとして識別されます。

現在、私はこれを行っています:

var w = new Workspace(); // This is a mongoose model
w.name = req.body.workspace;
w.activeFlag = true;
crypto.randomBytes(16, function(err, buf) {
    if(err){
        next(new g.errors.BadError503("Could not generate token") );
    } else {
        var token = buf.toString('hex');

        // Access is the list of users who can access it. NOTE that
        // the token is all they will pass when they use the API
        w.access = {  login: req.session.login, token:token, isOwner: true };
        w.save( function(err){
            if(err){
                next(new g.errors.BadError503("Database error saving workspace") );

これはAPIトークンを生成するための良い方法ですか?

トークンは名前+ワークスペースなので、md5(ユーザー名+ワークスペース+シークレット文字列)のようなことをする必要があります...?

4

4 に答える 4

19

mongodbを使用している場合は、ObjectIdを使用するだけです。それ以外の場合は、サブスタックのhatモジュールをお勧めします。

IDを生成するのは簡単です

var hat = require('hat');

var id = hat();
console.log(id); // 1c24171393dc5de04ffcb21f1182ab28
于 2012-08-27T03:41:09.313 に答える
7

このコードは、トークンが一意であることをどのように確認しますか?このコードと数字が衝突する可能性があると思います。socket.ioからのこのコミットのようなシーケンス番号が必要だと思います。

また、次のようなnpmプロジェクトを使用することもできます。

独自性を確保するため。

于 2012-08-27T03:16:06.997 に答える
4

APIトークンを生成するための最良の解決策は次のとおりだと思います

このキーは短時間(たとえば30秒)しか利用できないため、Speakeasyの方が安全です。

于 2016-09-08T05:53:17.457 に答える
1

何かユニークなものを探しているなら、なぜUUIDv4を使用しないのですか?他のタイプのハッシュに興味がある場合(前述のように、前の帽子が良い選択です)、speakeasy(https://github.com/markbao/speakeasy )を参照してください。ランダムなキーを生成するだけでなく、セキュリティをさらに強化したい場合は、時間ベースの2要素認証キーを作成することもできます。

于 2012-08-27T18:32:15.547 に答える