web-dev-qa-db-ja.com

REST APIの認証を実装する最良の方法

モバイル向けのソーシャルベースのアプリケーションを開発しています。すべてのアプリケーションがRESTful API Webサービスを使用します。ログインを実装するときは、通常、ユーザー名とパスワードをデバイスのどこかに保存します。次に、それらを送信し、応答として自分のプロファイルにアクセスします。しかし、これを行う別の方法があることも知っています。

どういうわけか、特定のアルゴリズムでトークンを生成し、ユーザー名とパスワードの代わりにトークンを送信してアクセス権を取得します。

それをどのように実装すればよいですか?ログイン以外のすべてのリクエストとともにこのトークンを送信する必要がありますか?

21

RESTfulなコンテキストでauthenticationを実装する方法はいくつかあり、ログイン/パスワードの代わりにトークンのみを送信する方が安全です。簡単にトークンを作成できますタイムアウトまたはその他の基準によって無効になり、ユーザーに再認証を要求します。

たとえば authentication REST HMACを使用したリクエスト 。このアプローチでは、クライアントはpublicおよびsecret keysauthenticationを必要とするすべてのリクエストに、 publiсkey、そしてsecret keyを使用してリクエストのハッシュを計算します

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

これで、サーバーは公開キーによって要求を識別し、requestHash自体を計算できます。両方のハッシュが等しい場合、ユーザーは承認されます。

ところで、コンピューターネットワーク経由の通信をセキュリティで保護するには、httpsも使用する必要があります。これにより、考えられる問題の数が劇的に減少します。

14
Akim

これにはoAuthが標準ですが、他にも解決策があります。

セキュリティやトークンなどを自分で実装しようとしないでください。これは難しくリスクのあるトピックです。ここで例を見てみましょう:

https://stackoverflow.com/questions/4574868/securing-my-rest-api-with-oauth-while-still-allowing-authentication-via-third-pa

9
Luc Franken