2017-10-24 1 views
1

Ich implementiere eine Web-API mit angularjs. Ich kann es ohne Probleme laufen und bekomme, was ich will, das einzige ist, ich bin in der Lage, meine "access_token" in der "Antwort" Registerkarte meines "Netzwerk" Tab zu sehen. Obwohl es verschlüsselt ist, kann ich es sehen. Meine Frage ist: 1. Ist das sicher? 2. Wie verstecke ich es, wenn es keine gute Praxis ist? 3. Wenn ich dieses "access_token" kopiere und es in eine "Postman" -Anwendung stelle, kann ich tatsächlich authentifiziert werden. Wie gehe ich vor, um das zu vermeiden?Zugriffstoken wird auf der Registerkarte "Antwort" angezeigt

Get Token vom Server

myApp.factory('accountService', [ 
    '$http', '$q', 'serviceBasePath', 'userService', function($http, $q, serviceBasePath, userService) { 
     var fac = {}; 
     fac.login = function(user) { 
      var obj = { 'username': user.username, 'password': user.password, 'grant_type': 'password' }; 
      Object.toparams = function ObjectsToParams(obj) { 
       var p = []; 
       for (var key in obj) { 
        p.push(key + '=' + encodeURIComponent(obj[key])); 
       } 
       return p.join('&'); 
      } 

      var defer = $q.defer(); 
      $http({ 
       method: 'post', 
       url: serviceBasePath + "/token", 
       data: Object.toparams(obj), 
       headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
      }).then(function(response) { 
       userService.SetCurrentUser(response.data); 
       defer.resolve(response.data); 
      }, function(error) { 
       defer.reject(error.data); 
      }); 
      return defer.promise; 
     } 
    fac.logout = function() { 
     userService.CurrentUser = null; 
     userService.SetCurrentUser(userService.CurrentUser); 
    } 
    return fac; 
} 

]); 

Set und erhalten Sie das Token

myApp.factory('userService', function() { 
    var fac = {}; 
    fac.CurrentUser = null; 
    fac.SetCurrentUser = function (user) { 
     fac.CurrentUser = user; 
     sessionStorage.user = angular.toJson(user); 
    } 

    fac.GetCurrentUser = function() { 
     fac.CurrentUser = angular.fromJson(sessionStorage.user); 
     return fac.CurrentUser; 
    } 
    return fac; 
}); 

Danke.

+0

werfen Sie einen Blick https://rnd.feide.no/2012/04/19/best-practice-for-dealing-with-oauth-2-0-token-expiration-at-the-consumer/ – Manish

+0

Danke für den Link, aber ich denke, dass es meine Fragen nicht anspricht. Die einzige Information, die ich tatsächlich bekommen habe, ist die Gültigkeitsdauer der Zugriffstoken, die ich tatsächlich gemacht habe, auf 1 Tag zu setzen (nicht in meinen Codes, aber ich habe es gesetzt). –

+0

was für ein Token ist es? –

Antwort

1

Für Sicherheit wie folgt vor:

Sicherstellen, dass die Zugriffstoken Cookie ein sicheres Cookie ist.

Stellen Sie sicher, dass der Zugriffstoken-Cookie ein HTTPS-Cookie ist.

Siehe https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies

Auch der Server prob einen geheimen Schlüssel hat das Cookie zu dekodieren. Stellen Sie sicher, dass Sie es privat halten (legen Sie es nicht auf eine öffentliche Repo).

Stellen Sie sicher, dass Sie den Unterschied zwischen Autorisierung (401, wenn nicht autorisiert) und Authentifizierung (403, wenn nicht authentifiziert) verstehen. Der grundlegende Unterschied besteht darin, dass Sie durch die fehlgeschlagene Autorisierung nicht im Stich gelassen werden. Während die Authentifizierung bestimmten Benutzern nur bestimmte Server-Endpunkte zur Verfügung stellt.

z.B. Ein Benutzer in group1 kann zwar Daten abrufen, aber keine neuen Daten POST. Sie würden 403 bekommen, wenn sie versuchen würden, POST zu machen. Ein Benutzer in group2 kann nach Herzenslust POSTIEREN.

+0

Was meinen Sie mit "das Access Token Cookie ist ein sicheres Cookie"? Das Access_Token ist tatsächlich verschlüsselt, aber das Problem ist; jemand kann einfach den Entwickler-Tab öffnen und das access_token kopieren, den Postboten öffnen, ihn in die Header einfügen und dann authentifizieren. Ich benutze die 401 und 403 bereits.Ich möchte nur das "access_token" ausblenden, damit es nicht zum Kopieren und Einfügen in den Postboten oder eine andere Anwendung einfach so verwendet werden kann. –

+0

ist es kein Problem, dass sie es kopieren können - sie sind ein autorisierter Benutzer, vorausgesetzt sie haben ein gültiges Zugriffs-Token - stellen Sie einfach sicher, dass Sie es ab und zu ablaufen - ein sicheres Cookie bedeutet JavaScript kann nicht darauf zugreifen, so dass ein Skript läuft Ihre Seite kann sie nicht lesen, sie kann nur in Serveranfragen gesendet werden und wird vom Server mithilfe des Set-Cookie-Antwortheaders gesetzt. – danday74

+0

Aber was ist mit diesem Szenario: "legit_user" meldet sich an, macht gültige Sachen, zu denen sie berechtigt sind suchen, einfügen, aktualisieren, löschen, schließt den Browser ohne sich abzumelden, verlässt dann seinen Schreibtisch aus irgendeinem Grund. "Mr_X" öffnet den Browser, drückt "f12", kopiert das "access_token", benutzt den Postboten und benutzt dann die Zugriffsrechte von "legit_user"? –

1

Es gibt keine Möglichkeit, das zu vermeiden. Ebenso können Sie Ihren Authentifizierungscookie auf einer beliebigen Website verwenden und Postman verwenden, um als Nutzer auf der Website anzurufen.

Wenn Sie das Token an den Browser senden, kann der Benutzer es erhalten.

Sie müssen sicherstellen, dass Sie auf Ihrer Server-Seite überprüfen, ob der Benutzer Berechtigungen hat, die Sache zu tun, die sie versuchen zu tun. Dann spielt es keine Rolle, ob ein Benutzer den Token nimmt und manuell aufruft, da die einzigen Dinge, die er tun kann, Dinge sind, die er normalerweise über die App tun könnte.

+0

Oh! Im Grunde genommen kann ich nur "geringste Privilegien" verwenden, da das "access_token" nicht versteckt werden kann. –

Verwandte Themen