2016-11-27 6 views
0

私はJson Webトークンを初めて使用しました。最近認可ニーズに適したプロジェクトのための角度認証チュートリアルを実装しました。JWTからパラメータを取得しようとしています

https://devdactic.com/restful-api-user-authentication-1/

今私はクライアント側でJWTをデコードし、他のAPI呼び出しの一意のIDとして使用するオーデルでユーザー_idを引き出したいが、私はそれを行う方法が表示されません。

JWTの情報を引き出して使用する良い例がありますか?

'use strict'; 

angular.module('App') 

.service('AuthService', function($q, $http, API_ENDPOINT) { 
    var LOCAL_TOKEN_KEY = 'My big secret here'; 
    var isAuthenticated = false; 
    var authToken; 

    function loadUserCredentials() { 
    var token = window.localStorage.getItem(LOCAL_TOKEN_KEY); 
    if (token) { 
     useCredentials(token); 
    } 
    } 

    function storeUserCredentials(token) { 
    window.localStorage.setItem(LOCAL_TOKEN_KEY, token); 
    useCredentials(token); 
    } 

    function useCredentials(token) { 
    isAuthenticated = true; 
    authToken = token; 

    // Set the token as header for your requests! 
    $http.defaults.headers.common.Authorization = authToken; 
    } 

    function destroyUserCredentials() { 
    authToken = undefined; 
    isAuthenticated = false; 
    $http.defaults.headers.common.Authorization = undefined; 
    window.localStorage.removeItem(LOCAL_TOKEN_KEY); 
    } 

    var register = function(user) { 
    return $q(function(resolve, reject) { 
     $http.post(API_ENDPOINT.url + '/signup', user).then(function(result) { 
     if (result.data.success) { 
      resolve(result.data.msg); 
     } else { 
      reject(result.data.msg); 
     } 
     }); 
    }); 
    }; 

    var login = function(user) { 
    return $q(function(resolve, reject) { 
     $http.post(API_ENDPOINT.url + '/authenticate', user).then(function(result) { 
     if (result.data.success) { 
      storeUserCredentials(result.data.token); 
      resolve(result.data.msg); 
     } else { 
      reject(result.data.msg); 
     } 
     }); 
    }); 
    }; 

    var logout = function() { 
    destroyUserCredentials(); 
    }; 

    loadUserCredentials(); 

    return { 
    login: login, 
    register: register, 
    logout: logout, 
    isAuthenticated: function() {return isAuthenticated;}, 
    }; 
}) 

.factory('AuthInterceptor', function ($rootScope, $q, AUTH_EVENTS) { 
    return { 
    responseError: function (response) { 
     $rootScope.$broadcast({ 
     401: AUTH_EVENTS.notAuthenticated, 
     }[response.status], response); 
     return $q.reject(response); 
    } 
    }; 
}) 

.config(function ($httpProvider) { 
    $httpProvider.interceptors.push('AuthInterceptor'); 
}); 

私の目標は、トークンを解析する機能を追加しての私は、1つのまたは複数のparamsを引くようにすることです:

は、ここに私の認証サービスです。

答えて

0

JWT(Learn JSON Web Tokens)は、含まれるデータに署名および/または暗号化を許可します。認証に使用されるJWTについて言えば、受け取ったトークンはただ署名されていることがほぼ確実です。 この前提の前提は、署名されていないとその情報を信頼できないため、認証に使用する意味がなく、暗号化されたトークンが広く使われていないということです。

さらに、HTTP環境で使用するときにトークンを表す推奨される方法は、データペイロードを含むトークンのさまざまな部分をbase64urlでエンコードすることです。これは、必要なbase64urlデコードを適用し、その結果をJSONとして解釈することで、データに簡単にアクセスできることを意味します。ただし、そのデータを信頼するためには、署名を検証し、ユースケースに該当するその他の検証を行う必要があります。

jwt.ioライブラリセクションをチェックすると、Javascriptで実装され、JWTでの作業をサポートするライブラリのリストを取得できます。

たとえば、Auth0 angular-jwtライブラリを確認し、example on how to decode a tokenを参照してください。


最後に、他の呼び出しで使用するためにユーザー識別子をプルしたいとします。他のコールが、セキュアでないように見える受信したユーザ識別子に基づいて機密性の高い決定を行う場合。

関連する問題