7

設定

Java と Springを使用して分散アプリケーションを開発しています。既存のクライアント フロント エンド (独自の認証、データベース、アカウントなどを備えています) は、REST呼び出しを使用して新しいサーバーにアクセスし、追加のサービスを提供します。これらのリソースをOauthで保護したいと考えています。

アクセスは役割またはアカウントによって制限する必要があります。ただし、クライアント側のユーザーが既存のアカウント以外の追加の認証について心配する必要はありません。同時に、サーバーに対して何らかの登録を行った後、サードパーティのアプリケーションが外部からいくつかのリソースにアクセスする手段を提供する必要があります (これが、最初に配布している理由です)。

そのため、リソースへのアクセスを制限するために使用する必要があるアカウントを提供するために、サーバー側で春のセキュリティを設定しました。ユーザーはクライアント側でログインし、自分に割り当てられたサーバー リソースにのみアクセスできるようにする必要があります。サーバーサービスにアクセスできるようにクライアント側でユーザーを設定するある種の登録プロセスがあるため、アカウントの設定はそこで行う必要があると思います。

だから質問は

ユーザーがサーバー側のアカウントにログインしなくても、クライアント側が保護されたリソースのアクセス トークンを取得できるようにするにはどうすればよいですか?

また、ユーザー入力を必要とせずにサーバー側のアカウントをセットアップするにはどうすればよいですか?

私の考え

これはいけません

そのユーザーのためにサーバー側で作成された新しいアカウントについてクライアントに伝える必要があると考えています (ただし、パスワードを選択して伝達するにはどうすればよいでしょうか?) または、クライアント側のアカウントをサーバーに同期する必要があります。これらの資格情報を使用して、サーバーに対してクライアントを認証し、アクセス トークンを生成します。しかし、それはどのように節約できますか?また、サーバーのアカウントにははるかに高いセキュリティ (一方向暗号化、ソルト化されたパスワード) があり、あまり保存されていないクライアント アカウントを使用してこれを危険にさらしたくありません。

たぶんこれでしょう?

おそらく、最初の認証中にクライアントアカウントについてサーバーに伝え、サーバー側でアカウントを作成し、生成されたトークンをクライアント側に保存し、その後の各トークンでサーバーに対してクライアントを認証することになります。リクエスト..?サーバーは、リクエストごとにそのトークンを介してサーバー側のアカウントを使用してクライアントにログインできますか? クライアントサーバーからのみアクセスできる最初の(2足の?)ハンドシェイクには特別なリソースが必要ですよね?

また、このタスクには、OAuth 1 と 2 のどちらが適していますか?

誰かが私の問題を理解し、考えられる誤解や知識のギャップを整理するのを手伝ってくれることを願っています (私は現在、Oauth と春のセキュリティ ドキュメントを読んでいるので、より明確な画像とより明確な質問を思いついたら更新します)何をするかの)

助けてくれてありがとう!

4

1 に答える 1

1

したがって、現在のステータスは、主に単純化のためにOAuth2を使用することです。また、セキュリティに関する欠陥は、必要に応じて自分たちでカバーできると確信しており、将来的には実装ベンダーまたはIETFによって対処される可能性があります。

RESTサーバーとRESTクライアント(両方を制御)間の通信を処理するために、以前は2脚認証と呼ばれていたものを使用し、現在はクライアント資格情報を付与します。私はそれについてSOについていくつか質問しました


サーバーに対する認証のためのクライアントベースのユーザーアカウントの使用に関しては、これ以上取得できませんでした。

今のところ、以前と同じように古いクライアントWebアプリケーションに対してユーザーを認証してから、2本足のサーバーに対してクライアントを認証します。理論的には、これにより、すべてのユーザーがクライアントアクセストークンを使用して任意のリソースにアクセスできるようになりますが、現時点では問題ないため、今後は調査しません。

それでも、これがどのように解決されるかについて誰かが良いアイデアを持っている場合は、セキュリティをさらに強化するために、それを取り上げます。したがって、この質問は開いたままにしておきます。

私の考えは現在、認証サーバー上の各ユーザーの新しいクライアントIDを生成されたシークレットに登録し、それらをクライアントサーバーに同期して、それらのclient_id / secretの組み合わせを使用して、生成されたユーザーのリソースにアクセスするというものです。クライアント資格情報フローのclient_id。

最新のアプリケーションでは、アカウントをRESTサーバー(認証プロバイダー)に保存し、ユーザーにそのサーバーに対してログインさせてから、仕様で意図されているようにトークンを使用してRESTリソースにアクセスします。

于 2013-01-23T08:08:06.577 に答える