Google 로그인을 Open ID과 통합합니다. 문서에 위조 방지 토큰을 만들어야한다고 나와 있습니다. CSRF (Sitepoint, StackOverflow, Shiflett)에 대한 여러 참고 자료와 몇 가지 내용을 읽었습니다. 이 솔루션을 구현하는 방법을 이해하는 것을 끝낼 수 없습니다.CSRF with Google 클라이언트 PHP 인증 흐름
저는 개념을 제대로 이해하지 못했지만 열심히 노력하고 있습니다. 이것은 내가 지금까지 코딩 한 과정이다 : 물론
<?php session_start();
//INCLUDE PHP CLIENT LIBRARY
require_once 'vendor/autoload.php';
$scopes = array('email', 'profile');
// Create client object
$client = new Google_Client();
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php');
$client->setAuthConfig("client.json");
$client->addScope($scopes);
$client->setAccessType("offline");
if(isset($_SESSION["access_token"]) && $_SESSION["access_token"]) {
if(isset($_SESSION['tokencsrf']) && $_SESSION['tokencsrf'] !== "") {
$client->setAccessToken($_SESSION["access_token"]);
if ($client->isAccessTokenExpired()) {
$refreshTokenTxt = "refreshToken.txt";
$tokenHandle = fopen($refreshTokenTxt, "r");
$refreshToken = fread($tokenHandle, filesize($refreshTokenTxt));
$client->refreshToken($refreshToken);
$_SESSION['access_token'] = $client->getAccessToken();
$client->setAccessToken($_SESSION["access_token"]);
}
$objOAuthService = new Google_Service_Oauth2($client);
$userData = $objOAuthService->userinfo->get();
var_dump($userData);
} else {
die(" --- INVALID CSRF! ---");
}
} else {
$_SESSION['tokencsrf'] = bin2hex(openssl_random_pseudo_bytes(16));
if(!isset($_GET["code"])){
$authUrl = $client->createAuthUrl();
header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$refreshTokenTxt = "refreshToken.txt";
if (!file_exists($refreshTokenTxt)) {
$tokenHandle = fopen($refreshTokenTxt, "w");
fwrite($tokenHandle, $_SESSION['access_token']["refresh_token"]);
}
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/index.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}
?>
, 이것은이 그 일의 적절한 방법이 있는지 확인하기위한 테스트 스크립트입니다. 지금까지는 잘 작동하지만 이것이 올바른지 확실하지 않습니다. 본인이 사용하기에 괜찮은지 또는 어떤 변경을 제안 할 수 있는지를 확인할 수있는 사람의 지원을 부탁드립니다. 당신의 소중한 의견을 들어서, 저는 매우 감사합니다!