현재 모바일 및 웹 애플리케이션에서 API는 사용자와 애플리케이션에 대화형 인터페이스를 제공하는 데 필수적인 부분입니다. 그러나 이러한 API는 악의적인 사용자와 해커에게 위험을 초래하고 민감한 데이터가 유출될 수도 있습니다. 따라서 API는 무단 액세스를 방지하기 위해 보안을 유지해야 합니다. OAuth 2.0은 토큰을 통해 API에 액세스할 수 있는 권한이 있는지 확인하는 검증된 방법입니다.
이 기사에서는 PHP에 OAuth 2.0을 통합하여 API를 보호하는 방법을 살펴보겠습니다.
OAuth 2.0이란 무엇인가요?
OAuth 2.0은 사용자가 제3자에게 자신의 리소스(예: 사진, 문서, 연락처 등)에 액세스할 수 있는 권한을 부여할 수 있는 개방형 표준입니다. 보다 구체적으로 OAuth 2.0은 인증 토큰을 사용하여 사용자를 대신하여 리소스에 액세스합니다. 액세스 토큰은 권한 부여 서버에서 발급한 자격 증명으로 리소스에 액세스할 때 호출자에게 제공됩니다. 호출자는 각 요청에 이 토큰을 사용하여 리소스에 액세스할 수 있는 권한이 있음을 나타낼 수 있습니다.
PHP에 OAuth 2.0 통합
PHP에는 선택할 수 있는 OAuth 2.0 라이브러리가 많이 있습니다. 이번 글에서는 phpleague/oauth2-client 패키지를 이용하여 OAuth 2.0을 구현하는 과정을 소개하겠습니다.
1단계: phpleague/oauth2-client 패키지 설치
먼저 phpleague/oauth2-client 패키지를 설치해야 합니다. Composer 패키지 관리자를 사용하여 설치할 수 있습니다. 터미널 또는 명령줄 인터페이스에서 프로젝트 디렉터리로 이동하여 거기서 다음 명령을 실행합니다.
composer require league/oauth2-client
2단계: 공급자 클라이언트 설정
이제 공급자 클라이언트를 정의해야 합니다. 여기서는 GitHub OAuth 공급자를 예로 사용합니다. 먼저 CLIENT_ID 및 CLIENT_SECRET 상수 값을 실제 애플리케이션 자격 증명으로 변경합니다.
<?php require 'vendor/autoload.php'; use LeagueOAuth2ClientProviderGithub; const CLIENT_ID = 'your_client_id'; const CLIENT_SECRET = 'your_client_secret'; const REDIRECT_URI = 'http://localhost/oauth2/callback.php'; $provider = new Github([ 'clientId' => CLIENT_ID, 'clientSecret' => CLIENT_SECRET, 'redirectUri' => REDIRECT_URI, ]);
3단계: 인증 코드 받기
다음으로 인증 코드를 받아야 합니다. 인증 코드는 추가로 액세스 토큰을 얻을 때 신원을 확인하는 데 사용되는 임시 토큰입니다.
<?php $authorizationUrl = $provider->getAuthorizationUrl([ 'scope' => ['user', 'repo', 'notifications'] ]); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authorizationUrl);
위 코드에서 getAuthorizationUrl()
메서드는 인증 URL을 반환하고, 이 URL로 점프하면 사용자가 GitHub로 이동하여 액세스 토큰을 제공하도록 요청합니다. GitHub가 권한을 부여하면 사용자를 권한 부여 코드가 포함된 리디렉션 URI로 다시 라우팅합니다. getAuthorizationUrl()
方法返回一个授权URL,跳转到该URL将引导用户到GitHub,要求他们提供访问令牌。当GitHub授权后,它会将用户重新路由到一个重定向URI,其中包含授权码。
步骤4:获取访问令牌
现在,我们需要使用我们在上一步中获得的授权码来获取访问令牌。
<?php if (isset($_GET['code']) && isset($_GET['state']) && isset($_SESSION['oauth2state'])) { if ($_GET['state'] === $_SESSION['oauth2state']) { try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); $accessToken = $token->getToken(); $refreshToken = $token->getRefreshToken(); $expires = $token->getExpires(); } catch (Exception $e) { exit('Failed to get access token: ' . $e->getMessage()); } // Get the user object. try { $user = $provider->getResourceOwner($token); $name = $user->getName(); $email = $user->getEmail(); $imageUrl = $user->getAvatarUrl(); $profileUrl = $user->getHtmlUrl(); } catch (Exception $e) { exit('Failed to get user: ' . $e->getMessage()); } // Store the access token and user data somewhere // for use in your application. $_SESSION['github_access_token'] = $accessToken; $_SESSION['github_refresh_token'] = $refreshToken; $_SESSION['github_expires'] = $expires; $_SESSION['github_user_name'] = $name; $_SESSION['github_user_email'] = $email; $_SESSION['github_user_image'] = $imageUrl; $_SESSION['github_user_profile_url'] = $profileUrl; // Redirect the user to the original page // or some other authorized page in your application. header('Location: /'); exit(); } else { exit('Invalid state'); } }
在上面的代码中,我们首先使用getAccessToken()
方法获取访问令牌。然后,我们使用getResourceOwner()
<?php $client = new GuzzleHttpClient(); $response = $client->request('GET', 'https://api.github.com/user', [ 'headers' => [ 'Authorization' => 'Bearer ' . $_SESSION['github_access_token'], 'User-Agent' => 'OAuth2 Client' ] ]); $body = $response->getBody(); $userData = json_decode($body, true);위 코드에서는 먼저
getAccessToken()
메서드를 사용하여 액세스 토큰을 가져옵니다. 그런 다음 getResourceOwner()
메서드를 사용하여 사용자 개체를 가져옵니다. 마지막으로 사용자 데이터와 액세스 토큰을 세션에 저장합니다. 5단계: 액세스 토큰을 사용하여 API 호출마지막으로 액세스 토큰을 사용하여 보호된 API를 호출할 수 있습니다. 이 예에서는 액세스 토큰을 사용하여 인증해야 하는 GitHub API를 사용합니다. rrreee
위 코드에서는 Guzzle HTTP 클라이언트를 사용하여 GitHub API를 호출하고 있습니다. 이 API에 대한 액세스 권한이 있음을 나타내기 위해 액세스 토큰으로 Authorization 헤더를 설정합니다. 결론🎜🎜PHP에 OAuth 2.0을 통합하는 것은 API를 보호하는 좋은 방법입니다. phpleague/oauth2-client 패키지를 사용하면 공급자로부터 액세스 토큰을 얻을 수 있으며 해당 토큰을 사용하여 보호된 API를 호출할 수 있습니다. 또한 향후 사용을 위해 사용자 데이터와 토큰을 저장할 수 있습니다. 🎜🎜이제 OAuth 2.0 통합을 시작하여 API를 보호하고 사용자 데이터를 보호할 수 있습니다. 🎜위 내용은 API 보안을 위해 PHP에 OAuth 2.0을 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!