2016-06-22 20 views
0

私はAngular + Springアプリを持っており、JWTトークンでサービスを認証しようとしています。ブラウザでの直接URLヒットのJwtトークン認証

Jwt認証では、トークンをlocalStorageに格納し、トークンをすべての要求の認証HTTPヘッダーに添付します。これは、AngularJsにインターセプタを書き込むことで行うことができます。私はthisチュートリアルに続いています。

私の質問は次のとおりです。
ブラウザでURLを直接入力してリクエストを認証するにはどうすればよいですか?

この時点でUrlを押すと、ページはロードされず、localStorageからAuthenticationヘッダーにURLをバインドするスクリプトもありません。最終的にサーバーは要求が拒否され、ユーザーが以前に認証されていても401を送信します。動画、画像やブラウザによって直接ロードする必要がある書類などのWebリソースについては

+0

ときヘッドURLに直接アクセスすると、クッキーだけがクライアントが認証されたことを通知する純粋に自動化された手段を提供します。あなたのサーバは、試行されたURLが挿入されたカスタム401/Unauthorizedレスポンスを提供できますか?JWTをlocalStorageから取り出してリクエストしますか?最も効率的なアプローチではありません。 – amoebob

+0

ブラウザでヒットしたリクエストにヘッダーを追加できないと思います。 – pratik

+0

私が試みたURLを401レスポンスで注入してjwtを取り出した後でも、新しいページリクエスト(ajaxリクエストではない)にヘッダーを追加する方法は?私はそれが可能ではないと思う[this](http://stackoverflow.com/questions/24130004/adding-http-headers-to-window-location-href-in-angular-app?answertab=active#tab-top ) 会話。 – pratik

答えて

1

、(あなたがヘッダーを設定することはできません)サーバー側で

path/to/resource?jwt=... 

JWTでURLにパラメータを追加し、デコードURL認証ヘッダーの場合は、あなたが検索エンジンから、たとえば、生成していない着信リンクについて

存在していなかった場合はJWTを探して、

1) accept the link and redirect user to login page with a cookie/field set to the destination page 
    2) automatically, login user with JWT from local storage set in header in the usual way 
    3) if it is succesful, redirect to the destination 
+0

あなたのアプローチによると私はサーバー側に2つの条件を書かなければならないと思います 1)ヘッダーのjwtを確認してください - >存在し、有効であれば - >ユーザーが認証されました 2)ヘッダーに存在しない場合 - jwtのパラメタ - >存在し、有効な - >ユーザが認証されている場合.. 私は正しいですか? – pratik

+0

はい、あなたは正しいです – pedrofb

関連する問題