web-dev-qa-db-ja.com

セッション管理:RESTサービスの認証トークンを生成する方法?(ジャージー)

RESTサービスにセッション管理を実装しようとしています。サーフィン中にこれらのガイドラインを知るようになりました。

  1. サーバー側セッションを使用しない-RESTful原則に違反します。

  2. HTTP基本認証の使用-SSL/TLSを使用しないように求められているため、現時点では不可能です(基本認証には間違いなく必要です)。

  3. Httpダイジェストの使用-これにより、ネットワークトラフィックが増加すると聞きました。これは、特に私のクライアントがモバイルデバイスである場合、費用がかかります。

  4. Cookieの使用-重要なリソースを保護するためにCookieに決して頼ってはいけないと言われています。さらに、Cookieを介したクロスサイトスクリプティング攻撃についても読みました。

  5. ユーザーが毎回送信する必要がある認証トークンを生成するオプションが残っています-これは「完全に」RESTfulではありません。

ここで、ビジネスレベルで十分に安全なこれらの一意の認証トークンをどのように生成すればよいかを知る必要がありますか? Jerseyのライブラリはありますか?私はOAuthに行くべきです。私はそれらについて少し読んだばかりですが、私の場合は便利ですか?ターゲットクライアントはモバイルデバイスであることに注意してください-OAuthサービスにアクセスできますか??

43
Jaguar

簡単にするために、 UUID を使用して独自の認証トークンを生成してから、トークン全体を Jasypt :-で暗号化します。

String key = UUID.randomUUID().toString().toUpperCase() +
        "|" + someImportantProjectToken +
        "|" + userName +
        "|" + creationDateTime;

StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();

...

// this is the authentication token user will send in order to use the web service
String authenticationToken = jasypt.encrypt(key);

キーにはcreationDateTimeが含まれているため、このキーを使用して有効期間を確認できます。この方法では、ユーザーがX分後に同じ認証トークンを使用すると、それはもう機能しなくなり、403禁止コードを送り返します。

38
limc