2017-05-23 6 views
0

Ich erstelle ein SPA mit angular2 & Lumen 5.4. Sagen wir einfach, es gibt zwei Routen. Eine GET Route, die JSON-Daten zur Anzeige zurückgibt, und eine POST Route zum Hochladen von Dateien in die Datenbank. Es ist eine Inhouse-App, die kein Login hat (das liegt nicht in meinen Händen).So sichern Sie API-Endpunkte ohne Benutzerauthentifizierung

Wie kann ich die Endpunkte ordnungsgemäß sichern? Für das Upload-Formular POST könnte ich ein verstecktes Token hinzufügen, aber das ist überhaupt nicht sicher. Alle Authentifizierung Tutorials für Lumen beinhalten Benutzeranmeldung, die für mich keine Option ist.

Alle Beispiele oder Tutorials wären wirklich da ich immer die Benutzerauthentifizierung in der Vergangenheit

+1

Sicherheit ohne irgendwelche Anmeldeinformationen? Ich meine, es gibt Token-basierte Authentifizierung, aber dieses Token muss immer noch auf etwas basieren. –

+0

Ja, ohne Anmeldeinformationen. Ich kann nichts dagegen tun, da ich die App für jemand anderen erstelle. So wollen sie es. – ghan

+1

Ohne irgendwelche Anmeldeinformationen wird dies schwer zu implementieren sein. Vielleicht könntest du App auf interne IP-Adresse (Middleware) beschränken, aber es ist nicht kugelsicher, auch keine nette Lösung. – Tim

Antwort

1

Sie könnten Sicherheit verwenden, basierend auf IP-Adresse oder so etwas, aber es ist das erste Mal, dass ich so etwas wie Ihre Frage gebraucht helfen , an jedem Punkt Ihrer App, wenn Sie Sicherheit wollen, benötigen Sie Anmeldeinformationen, natürlich können Sie immer andere Arten von auths machen, wie geben Sie die Telefonnummer oder die E-Mail und ich schicke Ihnen ein Token, die Sie in einem einzuführen weitere Form, sonst weiß ich nicht, was ich sonst in einer solchen Situation tun soll.

0

können Sie einfach verwenden middleware und MySQL, z.B .:

<?php 
namespace App\Http\Middleware; 

use App\ApiKey; 
use Closure; 

class ApiMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $tokenValid = ApiKey::where('api_key', $request->header('Authorization'))->exists(); 

     if (!$tokenValid) { 
      return response()->json('Unauthorized', 401); 
     } 

     return $next($request); 
    } 
} 

API_KEY könnte einige zufällige Zeichenfolge sein, nur str_random(64); verwenden und es zu Datenbank speichern. Dann sollten Sie dieses Token bei jeder Anfrage als Authorization Header anhängen. Einfach und sicher.

Zumindest aber nicht zuletzt, vergessen Sie nicht danach register es danach.

+0

Das ist definitiv sicherer als das, was ich tun würde. Ich bin jetzt arbeitslos und werde es nicht bis morgen implementieren können, aber schnelle Frage ... Wäre es sicherer, den 'API_KEY' zu verschlüsseln? Und wäre es sicherer, wenn ich so etwas wie ein verstecktes Feld am Frontend (das ist öffentlich bekannt) und ein "API_KEY" am Backend hätte und beide entschlüsseln/entschlüsseln und kombinieren müsste? – ghan

+0

Natürlich können Sie 'encrypt()' und 'decrypt()' helpers von Laravel verwenden. Es hängt davon ab, wie sensibel Daten auf dem Server sind. – wujt

Verwandte Themen