2016-10-28 2 views
0

一部のリソースへのアクセスを提供するRESTサービスのフロントエンドとして、Angular2クライアントWebアプリケーションクライアントを作成しています。他のエンドポイント用のユーザー/パスワード認証を必要とするang2ウェブクライアントのバックエンドRESTサービスへのログインページ

RESTサービスは、(たとえばGET /protectedresource、またはPOST /freeresource、など)、基本的なHTTP認証で保護され、(例えばGET /freeresource用)そのエンドポイントのいくつかのために認証されていないアクセスを許可しますされています。

私のAngular2クライアントでは、RESTサービスと同じ ":"でWebアプリケーションへのアクセスを許可するログページを実装したいと思います。このために私はこのチュートリアルを次のようだ:https://medium.com/@blacksonic86/angular-2-authentication-revisited-611bf7373bf9#.myifbz656

問題は、上記のチュートリアルでは、私のRESTサービスはありませんしながら、バックエンドRESTサービスは、あなたがあなたの資格情報を投稿した認証トークンを返す明示/loginエンドポイントを持っていることを前提としていることですそれらを必要とするエンドポイントのクレデンシャルがないか間違って渡されたときに認証エラーを返すだけです。このような状況のための代替記事やチュートリアルは見つかりませんでした。

このような場合にはどのような手続きを行うのが適切ですか?私は/loginエンドポイントをシミュレートすることができました。たとえば、アプリケーションのログインページから読み取ったユーザー名とパスワードで保護されたリソースにアクセスし、保護されたリソースGET /protectedresourceにアクセスしようとしました。この呼び出しでunauthorizedエラーが返った場合、満足している解決策ではありません(今日は保護されたリソースが明日自由にアクセスできるようになるでしょう)。この場合、Webアプリケーションのログインを実装するための「クリーン」な方法は何ですか?

答えて

0

/loginエンドポイントをシミュレートする必要はありません。どのリソースが認証を必要とするかにアクセスするだけでクライアント上で知る必要があります。チュートリアルと同じ "CanActivate"メソッドを実装し、REST呼び出しを行うときに資格情報を渡すためのサービス呼び出しを書く(またはユーザーがすでに認証されている場合はローカルストレージを使用する)ことができます。 RESTエンドポイントで毎回認証が必要な場合は、ログイン・ページでユーザーから取得し、ローカル・ストレージに保管し、認証が必要なエンドポイントにそれらを渡します。

+0

このソリューションの唯一の問題は、特定のリソースに関する情報を実際に要求する前に、ログインページ(ログインの成功/失敗)でユーザーに即座にフィードバックを与えることができるということです。 UI)。だからこそ私は、提供されたユーザー名/パスワードが有効かどうかをチェックするために、いくつかの保護されたリソース(つまり、私のUIが実際にこれを必要とする前に)に "時期尚早の" GETリクエストを発行することを提案したのです。おそらく私の質問には、バックエンドのRESTサービスを変更することができないと、本当の解決策はありません。どうもありがとう。 – chrx

関連する問題