web-dev-qa-db-ja.com

AngularJS-更新トークンを処理していますか?

サービス(Java)と通信するAngularJSを使用してSPAを構築しています。

ユーザーがユーザー名/パスを送信すると、サービスはアクセストークンと更新トークンの両方を送信します。処理しようとしています。ステータス401の応答を受け取った場合は、更新トークンを返送してから、最後のリクエストを再度送信します。 $ httpを含めてこれを実行しようとしましたが、angularではこのインターセプターに含めることができません。この応答パラメーターを使用して元のリクエストを再作成する方法はありますか?

何かのようなもの:

  1. 401
  2. 私のリクエストを保存
  3. 更新トークンがある場合は、その更新トークンを送信します
  4. 成功したらリクエストを再送信します
  5. / loginページへのエラーリダイレクト

    'use strict';
    
    angular.module('testApp')
        .factory('authentificationFactory', function($rootScope, $q, $window, $location, CONF) {
    
    return {
        request: function(config) {
            config.headers = config.headers || {};
            if ($window.sessionStorage.token) {
                config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
            }
            console.log(config);
            $rootScope.lastRequest = config;
            return config;
        },
    
        response: function(response) {
            console.log($rootScope.lastRequest);
            if (response.status === 401) {
                if ($window.sessionStorage.refreshToken) {
    
                    //Save, request new token, send old response
                    //if it fails, go to login
    
                    $location.url('/login');
                } else {
                    $location.url('/login');
                }
            }
            return response || $q.when(response);
        }
    };
    });
    

ボーナスの質問(メインの質問がより重要です):サービスにも接続する2つのモバイルアプリがあり、Webアプリからログインすると、モバイルアプリからしばらくすると、モバイルアプリが新しい更新トークンを取得しますそして、私のWebアプリの更新トークンはもう有効ではありません。それを処理するための最良のオプションは何でしょうか?

お時間をいただき、ありがとうございます

22
DyslexicDcuk

これを見てください: https://github.com/witoldsz/angular-http-auth

彼は認証後にリクエストを再生するためにバッファを使用します。

12
Sam

AngularのようなSPAで更新トークンを送信および保存することに対して強くお勧めします。

セッションストレージまたはローカルストレージを使用している場合は、XSS攻撃によって、またはユーザーがコンピューターを離れたままにして、このrefreshTokenをキャプチャする機会の窓を開いています。

詳細は この記事 または この質問 を参照してください。

5
amaurymartiny