JaaS 認証を REST に追加するためのシンプルで柔軟な方法を見つけようとしています。正しい方向に導くと思われる投稿を見つけました(StevenCの回答を参照)。Jerseyコード自体ではなく、サーブレットコンテナがセキュリティを担当しているようです。このアイデアは気に入っていますが、実装について少しガイダンスが必要です。
Grizzly は私のサーブレット コンテナーであり、認証に JaaS を使用するように構成したいと考えています。今のところ、単純なユーザー名とパスワードの組み合わせで問題ありません。ユーザー名とパスワードのペアをコードに直接ハードコーディングしても問題ありません。JaaS を使用している限り、後で詳細を調整できます。
HTTP 経由で送信されるものに関しては、Cookie を保存することが、これをすべて機能させる最も簡単な方法であると考えています。認証ジャンクをジャージーコードから遠ざけるために必要なものは何でも。
ここまでで Grizzly を起動するコードは次のとおりです。
final String baseUri = "http://localhost:9998/";
final Map initParams = new HashMap();
initParams.put("com.sun.jersey.config.property.packages",
"my.jersey.Service");
System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
System.out.println(String.format(
"Jersey app started with WADL available at %sapplication.wadl\n"
+ "Try out %shelloworld\nHit enter to stop it...", baseUri, baseUri));
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);
このプロセス全体が機能する場合、ユーザーのアクセス許可を確認する最善の方法は何ですか? おそらく、REST コードで特定の時点でアクセス許可を実際に検証したいと思うでしょう。私は正しい軌道に乗っていますか?もっと簡単な方法はありますか?チュートリアルへのリンクは素晴らしい答えです。「私はそれを行い、うまくいきました」のような答えでさえ、私が正しい方向に向かっているという温かいあいまいさを私に与えるでしょう.
助けてくれてありがとう。
編集:StevenCのコメントに対するいくつかの説明:
- リソースを保護するために、引き続きサーブレット フィルタを使用しますか? 認証の詳細をジャージー コードから分離できるものは何でも使用します。サーブレット フィルターである必要はありません。
- 「JaaS を使用するように構成する」とはどういう意味ですか? 当初の計画は、JaaS を使用して現在の API を保護することでした。次のフェーズは、API 全体をオンラインで利用できるようにすることです。API 呼び出しの周りに Jersey ラッパーを配置することは理にかなっているように見えましたが、Grizzly によって処理された認証を維持します。その時点で、Grizzly は JaaS とやり取りする必要があると思います。
- grizzly にリソースを保護させるだけの構成が必要だと思いますか? 私は、ユーザーを認証し、ロールに基づいて、ユーザーがリソースにアクセスすることを承認する 2 段階のプロセスを検討していました。アイデアは、Grizzly が (JaaS を使用して) 認証を処理し、Jersey が承認を処理するようにすることでした。
- 「RESTful リソースで Cookie を使用する必要はないと思います。」Cookie の使用を削除することは素晴らしいことですが、どうすれば実現できるのでしょうか? システムは、ユーザーが認証されているかどうかを知る必要があります。呼び出しごとにユーザー名/パスワードなどを渡すように依頼したくありません。すべての呼び出しでパラメーターとしてセッション トークンを渡すことでさえ、「醜い」ように見えます。
また、私は REST にかなり慣れていないことに注意してください。私はSOAPを数年間やっているので、「SOAPバイアス」があり、誰もが使用する明白で単純なソリューションから目がくらんでいる可能性があります. もっと簡単な方法がある場合は、お気軽に共有してください。私はできるだけ多くのことを学ぼうとしています。