Laravel 인증 jwt-auth에 로그인 실패시 잠금 기능을 추가하고 보안을 강화하는 방법
jwt-auth에 잠금 기능을 추가하여 보안을 강화하세요.
최근에는 프런트 엔드와 백엔드를 느슨하게 결합하는 것이 현대적인 구현이므로,
프런트엔드는 vue,nuxt등의 SPA를 사용해, Laravel을 API서버로서 사용하는 패턴이 많은 것은 아닐까요.
nuxt와 vue에서 Laravel에 로그인 할 때 API 인증 (로그인 기능)으로 자주 사용되는 것이 jwt-auth입니다.
htps : // 기주 b. 이 m / ty 몬데시 g s / jwt - 아 th
JWT 인증을 Laravel에 도입하는 순서에 대해서는, 여러가지 기사가 있습니다만,
보안을 강화하기 위해 jwt-auth의 표준에서는 탑재되어 있지 않은 인증에 여러 번 실패했을 때의 락 아웃 기능을 추가했습니다.
jwt-auth 도입
Laravel에 대한 API 인증 구현과 jwt-auth의 도입에 대해서는 이 기사를 이해하기 쉽습니다.
API로 로그인하여 bearer 토큰을 반환하고 프런트 엔드 SPA 등에서 이용할 때 사용합니다.
htps : // 코 m/자부로/있어 ms/176f907 에아 46767283785
htps : // 코 m / 노 자키 - 산코 sc / ms / 7 d320d6549f5f92b9b9
Bearer 인증 정보
laravel 표준 로그인에는 잠금 기능이 있지만 ...
laravel의 표준 로그인 기능에는 실패했을 때 잠그는 기능이 표준 탑재되어 있습니다. 멋지네요.
laravel/app/Http/Controllers/Auth/LoginController.php
protected $maxAttempts = 2; // ログイン試行回数(回)
protected $decayMinutes = 10; // ログインロックタイム(分)
이런 식으로 2개의 변수를 추가하는 것만으로 락아웃 기능을 유효하게 해 주는 나이스인 기능입니다만, 유감스럽게도 jwt-auth를 사용하고 있는 경우, 이 변수를 추가하는 것만으로는 물론 사용할 수 없습니다.
jwt-auth에서도 잠금 기능을 사용하는 방법
이 기사와 같이 API 로그인하여 token을 반환하는 기능을 구현한 경우 login() 메서드는 다음과 같습니다.
//id,pwで認証してtokenを発行
function login(){
$credentials = request(['email', 'password']);
//もし認証エラーなら
if(!$token = auth('api')->attempt($credentials)){
return response()->json(['error' => 'Unauthorized'], 401);
}
//OKならtoken発行
return $this->respondWithToken($token);
}
이 방법을 다음과 같이 수정했습니다.
use AuthenticatesUsers;
protected $maxAttempts = 3;
protected $decayMinutes = 1;
public function login(Request $request)
{
$credentials = $request->input(['email', 'password']);
// ログイン失敗回数をチェックして、制限を超えている場合はロックアウト
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
// ログインに失敗した場合のみ、試行回数を増やす
// 成功した場合はカウントしない。
if (!$token = auth('api')->attempt($credentials)) {
$this->incrementLoginAttempts($request);
return response()->json(['error' => 'Unauthorized'], 401);
}
// ログインに成功した場合は、制限をクリアする(お好みで)
$this->clearLoginAttempts($request);
$result = $this->respondWithToken($token);
return $result;
}
이 설정을 사용하면 로그인에 세 번 실패하면 1분 동안 잠금이 걸리고 429 Too Many Requests 응답이 반환됩니다.
락아웃 제한중에는 올바른 로그인 정보를 보내 와도 로그인은 통하지 않습니다.
sendLockoutResponse($request) 에는, 「앞으로 몇 초에 사용할 수 있게 될거야」라는 정보가 들어가 있습니다만,
게다가 보안을 높이는 것이라면 단순히 abort(429) 를 돌려주면 좋을 것입니다.
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
abort(429);
}
실패의 임계치등은 env 파일에 써 관리하는 편이 좋을지도 모르겠네요.
도움이되면 LGTM 버튼을 부탁드립니다
Reference
이 문제에 관하여(Laravel 인증 jwt-auth에 로그인 실패시 잠금 기능을 추가하고 보안을 강화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/reopa_sharkun/items/7def0cc0a8647df10ade텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)