2017-05-23 12 views
0

lum2를 사용하여 SPA를 작성했습니다. & lumen 5.4. 두 경로가 있다고 말하십시오. 표시 할 JSON 데이터를 반환하는 하나의 GET 경로와 파일을 데이터베이스에 업로드하기위한 하나의 POST 경로. 로그인이없는 자체 앱입니다 (내 손안에 있음).사용자 인증을 사용하지 않고 API 끝점을 보호하는 방법

엔드 포인트를 올바르게 보호하려면 어떻게해야합니까? POST 업로드 양식의 경우 숨겨진 토큰을 포함 할 수는 있지만 안전하지는 않습니다. 루멘에 대한 모든 인증 자습서에는 사용자 로그인이 포함되어 있으며 이는 나를위한 옵션이 아닙니다. 난 항상에서 사용자 인증을 사용했기 때문에

모든 예제 또는 자습서 정말 도움이 지난

+1

자격 증명없이 보안이 필요하십니까? 내 말은 토큰 기반 인증이 있지만 그 토큰은 여전히 ​​어떤 것을 기반으로해야한다는 의미입니다. –

+0

예, 자격 증명없이. 나는 다른 누군가를 위해 앱을 제작하고 있기 때문에 그것에 대해 아무 것도 할 수 없다. 이것이 그들이 그것을 원하는 방식입니다. – ghan

+1

자격 증명이 없으면 구현하기가 어렵습니다. 어쩌면 당신은 내부 IP 주소 (미들웨어)로 응용 프로그램을 제한 할 수 있지만 그것은 방탄되지 않습니다, 둘 다 좋은 해결책입니다 .. – Tim

답변

1

당신은 IP 주소 또는 그런 일을 기준으로 보안을 사용,하지만 난 당신의 질문 같은 것을 볼 처음이다 수 , 앱의 어느 시점에서든 보안을 원한다면 신임장이 필요합니다. 물론 전화 번호 나 이메일을 입력하는 것과 같은 다른 인증을 할 수 있으며 내가 소개 할 토큰을 보낼 수 있습니다. 추가 양식, 그렇지 않으면, 나는 그런 상황에서 무엇을 해야할지 모르겠다.

0

당신은 간단하게 사용할 수 있습니다 middlewareMySQL, 예컨대 :

<?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는, 어떤 임의의 문자열 단지 str_random(64);를 사용하여 데이터베이스에 저장할 수 있습니다. 그런 다음 모든 요청마다이 토큰을 Authorization 헤더로 첨부해야합니다. 간단하고 안전합니다.

적어도 아니지만 마지막으로, register 잊지 마세요.

+0

이것은 내가 뭘 하려는지보다 확실히 안전합니다. 나는 지금 일하며 내일까지 그것을 구현할 수 없을 것이다. 그러나 빠른 질문 ...'API_KEY'를 암호화/해시하는 것이 더 안전할까요? 프론트 엔드 (내가 아는 공용)와 백엔드의 'API_KEY'에 숨겨진 필드가 있고 둘 다 해제/해독하고 결합해야하는 경우 더 안전할까요? – ghan

+0

물론 Laravel에서 제공하는'encrypt()'와'decrypt()'헬퍼를 사용할 수 있습니다. 그것은 서버의 데이터가 얼마나 중요한지에 달려 있습니다. – wujt