반응형
JSON Web Token (JWT)은 인증 및 권한 부여를 위한 인증 프로토콜 중 하나입니다. JWT는 인터넷에서 데이터를 안전하게 전송하기 위해 사용되는 간단하고 강력한 방법 중 하나입니다.
JWT는 일반적으로 사용자 인증 및 클라이언트 - 서버 통신에서 사용됩니다. JWT는 토큰 자체에 사용자 정보를 포함시키므로, 클라이언트에서 서버로 이 정보를 계속 전달할 필요가 없습니다.
서버는 JWT가 포함하는 정보를 디코딩하여 사용자를 인증하고 권한을 부여할 수 있습니다.
jwt class
class jwt{
protected $alg;
function __construct(){
//사용할 알고리즘
$this->alg = "sha256";
}
function hashing(array $data){
// 토큰의 헤더
$header = json_encode(array(
"alg"=>$this->alg,
"typ"=>"JWT"
));
$payload = json_encode($data);
$signature = hash($this->alg, $header.$payload);
return base64_encode($header.".".$payload.".".$signature);
}
function dehashing($token){
// 토큰 만들때의 구분자 . 으로 나누기
$parted = explode(".", base64_decode($token));
$signature = $parted[2];
// 위에서 토큰 만들때와 같은 방식으로 시그니처 만들고 비교
if(hash($this->alg, $parted[0].$parted[1]) == $signature){
// echo "good";
}else{
//echo("잘못된 signature 입니다");
}
$payload = json_decode($parted[1],true);
return $payload;
}
}
로그인 정보 저장 (JWT를 사용하여 해싱하고, 쿠키로 저장하는 기능)
// 쿠키변수 생성
function set_cookie($cookie_name, $value, $expire){
setcookie(md5($cookie_name), base64_encode($value), time() + $expire, '/');
}
// 쿠키변수값 얻음
function get_cookie($cookie_name){
$cookie = md5($cookie_name);
if (array_key_exists($cookie, $_COOKIE))
return base64_decode($_COOKIE[$cookie]);
else
return "";
}
$user_id='user1';
$user_nm='홍길동';
$city='서울특별시';
$jwt = new jwt();
$login_token = $jwt->hashing(array(
"user_id"=> $user_id,
"user_nm"=> $user_nm,
"city"=> $city
));
//Cookie 저장 : 1달
set_cookie("token", $login_token, 2592000);
JWT 정보 가져오기 (저장된 JWT를 가져와 디코딩한 후, 사용자 정보를 출력하고 상수로 정의)
$get_login_token = get_cookie("token");
$jwt_data = $jwt->dehashing($get_login_token);
echo $jwt_data["user_id"]."<br>";
echo $jwt_data["user_nm"]."<br>";
echo $jwt_data["city"]."<br>";
define('SESSION_USER_ID', $jwt_data["user_id"]);
define('SESSION_USER_NM', $jwt_data["user_nm"]);
define('SESSION_CITY', $jwt_data["city"]);
echo SESSION_USER_ID."<br>";
echo SESSION_USER_NM."<br>";
echo SESSION_CITY."<br>";
SESSION_USER_ID, SESSION_USER_NM, SESSION_CITY 상수를 사용하여 사용자 정보를 간편하게 접근할 수 있습니다.
반응형
'개발이야기 > PHP' 카테고리의 다른 글
[PHP] AES 암호화 복호화 사용법, 예제, 데모 (대칭키 암호화) (0) | 2023.06.01 |
---|---|
[PHP] 문자열 필터링 함수 (SQL Injection 방어) (0) | 2023.05.09 |
[PHP] gmdate() 함수로 초(second) 를 시분초로 변환하기 (0) | 2023.04.20 |
[PHP] strpos 사용법, 예제 (특정 문자열 찾기) (2) | 2023.04.04 |
[PHP] 문자열 자릿수 채우기 str_pad 사용법, 예제 (0) | 2023.03.24 |
댓글