web-dev-qa-db-ja.com

REST APIおよびモバイルアプリの認証戦略

Node.jsとExpress + MongoDBを使用してREST APIサーバーを作成しています。このAPIには、さまざまなモバイルクライアント(iOS、Android)があり、後でWebアプリが含まれる可能性があります。いくつかのAPIリクエストを実行するためにログインします。接続したいサードパーティのアプリはありません(Facebook、Googleなどはありません)。また、ユーザーがWebページなどにアクセスするように強制したくありません。ログインします。

SOでの多くの検索で見たものから、最善のアプローチは、ユーザーが完全な資格情報で1回ログインし、代わりにトークンを送信し、そのトークンを使用して、有効期限が切れるまで将来の要求を検証することです。

ただし、これを実装する方法がわかりません。私はさまざまな戦略のすべてと非常に混乱しています。これは、HTTPSを介した基本認証、OAuth、OAuth 2.0、...?何を使用すればよいかわからないだけです。また、車輪の再発明は本当にしたくありません。ここでは、私が怠けているからではなく、主にセキュリティ上の懸念からです。これを実装するために使用できるライブラリはありますか?Passportについて聞いたことがありますが、これが実行可能かどうか理解できませんでした。そのような一般的なことは、そこに簡単な解決策があると確信しています。

ありがとう!

19
user3470440

これで、 Passport.js with JWT(JSON Web Tokens)with Passport-JWT を使用できます。使い方はとても簡単です。

ユーザーがログインしたら、トークンをユーザーに送信します。トークンには、ID(もちろんエンコードされている)などのユーザーに関するデータが含まれています。後続のリクエスト(少なくとも認証が必要な場合)では、クライアントがトークンを送信することを確認します。サーバーでは、トークンを確認するだけで、誰がリクエストを送信したかを確認できます(たとえば、ユーザーの承認を確認できます)。 JWTの動作の詳細については これをチェックしてください

トークンを送信するにはさまざまな方法があります。ドキュメントを見るだけで明らかになります。そうでない場合は、 this も役に立ちました。

10
Stefan

Oauth2認証を使用したRESTfulサービスの例があります: https://github.com/vedi/restifizer-example 。お役に立てば幸いです。

0
vedi

さまざまな種類のクライアント(Android、iOS、Webなど)からリクエストを送信できるように、サーバーでトークンベースの認証プロセスを設定する必要があると思います。残念ながら、Passportのドキュメント(およびPassportベースのチュートリアル)は「Webアプリケーション」のみを対象としているように思われるため、これらの目的で使用するべきではないと思います。

このすばらしいチュートリアルに従って、同様のことを行いました: http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs--cms-2254

このチュートリアルのクライアント部分はAngularJSに基づいていますが、モバイルクライアントでも同じ原則を簡単に適用できます(「/ signin」または「/ authenticate」に投稿したときに取得されるトークンを含むHTTPリクエストを作成するだけです)。 。

幸運を!

0
Samuel