5

node.js と express.js で構築された JSON RESTful API を構築しています。

API は、クライアント側の AJAX 呼び出し (Ember.js から) とネイティブの Android モバイル アプリ (標準の HTTP 要求) の両方からアクセスされます。

私は2つのことを調べています:

1) 認証 - どのユーザーが API にアクセスしているかを知る方法。開発では、各ユーザーに API キーを使用し、それをリクエスト ヘッダーに渡しました。

2) セキュリティ - 実際に認証されたユーザーのみがプライベート データにアクセスできるようにする方法。

API キーは、ネイティブ モバイル クライアントと AJAX 呼び出しの両方に適した戦略ですか? (ユーザーは user+pass を API に送信し、API キーを受け取ります。この API キーは、追加のリクエストの作成に使用されます)

OAUTH (1 or 2) のようなものを見るべきですか?現在、サードパーティのアプリケーションが API にアクセスする予定はないため、認証は必要ありませんが、これは将来変更される可能性があります。

独自の OAUTH プロバイダー サーバーを用意する必要があるということですか?

4

1 に答える 1

0

セッション ストアに保存されているセッション キーを使用して、通常の認証に express.js セッションを使用できます。Cookie 以外の REST 呼び出しとの互換性のために、クエリまたはリクエストの本文に追加された追加フィールド「mySessionId」を使用できます。次に、認証検証を変更して、その追加フィールドを確認します。おそらく、例がより役立つでしょう:

明示的に:

var server = express.createServer();
server.use(express.cookieParser());
server.use(express.session(sessionInfoObject));
server.get("/path/to/endpoint", function(request, response) {
    if(typeof(request.query.mySessionId) != "undefined") {
        // authenticate with the session id in mySessionId
        // eg: if (getSession(request.query.mySessionId).isAuth) {}
    }
    else {
        // session authentication, use request.session
        // eg: if (getSession(request.query.mySessionId).isAuth) {}
    }
});

このパスをたどることを選択した場合は、ユーザーを認証するときに、ユーザー関連のデータもセッションに追加するようにしてください。それはあなたの人生をずっと楽にしてくれます。例:

if(authenticated) {
    request.session.isAuth = true;
    request.session.customId = customId;
}

代替案はありますが、これが私が最も簡単だと思うものです。

于 2012-12-18T12:47:36.570 に答える