OAuth2는 사용자 이름과 비밀번호를 Google, Facebook, Twitter와 같은 소셜 네트워크와 같은 제3자 애플리케이션에 직접 전송하지 않고 사용자 리소스에 대한 액세스 권한을 부여하는 데 사용되는 널리 사용되는 개방형 표준 프로토콜입니다.
PHP에서는 미리 만들어진 OAuth2 라이브러리를 사용하여 OAuth2 흐름을 쉽게 구현하거나 자체 라이브러리를 구축하여 구현할 수 있습니다.
이 기사에서는 기성 OAuth2 라이브러리 사용, OAuth2 프로토콜을 사용하여 사용자 인증을 받고 해당 리소스에 액세스하는 방법에 중점을 둘 것입니다.
먼저 사용 가능한 OAuth2 라이브러리를 설치해야 합니다. 현재 php-oauth2-client, thephpleague/oauth2-client 및 bshaffer/oauth2-server-php를 포함하여 PHP 개발에 사용할 수 있는 여러 가지 OAuth2 라이브러리가 있습니다. 이 글에서는 OAuth2 라이브러리로 phpleague/oauth2-client를 사용하겠습니다.
이 라이브러리를 설치하려면 Composer를 사용하여 터미널에서 다음 명령을 실행하면 됩니다.
composer require league/oauth2-client
OAuth2 라이브러리를 설치했으면 이제 OAuth2 클라이언트 객체를 생성할 수 있습니다. 이 클라이언트는 OAuth2 프로토콜에 따라 서비스 제공자와 통신하고 당사와 서비스 제공자 간의 세션 상태를 유지합니다.
이 예에서는 GitHub를 OAuth2 공급자로 사용합니다. 클라이언트 개체를 생성하려면 다음 코드를 사용하세요.
$clientId = 'your_client_id'; // Your GitHub Client ID $clientSecret = 'your_client_secret'; // Your GitHub Client Secret $redirectUri = 'http://example.com/oauth2callback'; // Your redirect URI $provider = new LeagueOAuth2ClientProviderGithub([ 'clientId' => $clientId, 'clientSecret' => $clientSecret, 'redirectUri' => $redirectUri, ]);
위 코드는 $provider라는 OAuth2 클라이언트 개체를 생성하며, 이는 GitHub의 OAuth2 공급자에 액세스하는 데 사용됩니다. 그중에서 GitHub에서 할당한 클라이언트 ID, 클라이언트 비밀 및 콜백 URI를 제공해야 합니다.
OAuth2에서 인증 URL은 OAuth2 인증 프로세스를 통해 사용자를 안내하는 데 사용됩니다. 애플리케이션에 필요한 GitHub 리소스에 액세스하기 전에 애플리케이션을 인증할 수 있도록 사용자를 인증 URL로 리디렉션해야 합니다.
인증 URL을 얻으려면 다음 코드를 사용하세요.
$authorizationUrl = $provider->getAuthorizationUrl();
위 코드는 사용자를 리디렉션해야 하는 인증 URL을 반환합니다.
header('Location: ' . $authorizationUrl); exit;
사용자가 GitHub에서 OAuth2 승인을 성공적으로 수행하면 애플리케이션에서 제공하는 콜백 URL로 다시 리디렉션됩니다. 이 시점에서 이후에 인증이 필요한 GitHub 리소스에 액세스하려면 액세스 토큰을 얻어야 합니다.
다음으로 다음 코드를 사용하여 액세스 토큰을 얻을 수 있습니다.
$accessToken = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]);
위 코드는 인증 코드를 사용하여 액세스 토큰을 요청하고 $accessToken 개체를 반환합니다. 이 $accessToken 객체에는 액세스 토큰과 만료 시간, 새로 고침 토큰 등과 같은 관련 속성이 포함되어 있습니다.
이제 액세스 토큰을 얻었으므로 이를 사용하여 사용자 정보를 얻거나 저장소 목록을 읽는 등 인증이 필요한 GitHub 리소스에 액세스할 수 있습니다.
다음 코드를 사용하여 사용자 정보를 가져옵니다.
$user = $provider->getResourceOwner($accessToken); echo 'Hello, ' . $user->getName();
위 코드는 액세스 토큰을 사용하여 GitHub의 리소스 소유자 API를 호출하고 $user 개체를 반환합니다.
위 코드의 $user 개체는 사용자 및 기타 GitHub 리소스에 대한 정보를 얻는 데 사용할 수 있는 사용자 이름 및 기타 관련 속성을 반환합니다.
액세스 토큰이 만료되거나 유효하지 않게 될 수 있으므로 런타임에 상태를 확인하고 필요에 따라 토큰을 다시 새로 고쳐야 합니다.
다음 코드를 사용하여 액세스 토큰을 확인하고 새로 고치세요.
if ($accessToken->hasExpired()) { $newAccessToken = $provider->getAccessToken('refresh_token', [ 'refresh_token' => $accessToken->getRefreshToken() ]); } // Use $newAccessToken to access protected resources
위 코드는 액세스 토큰이 만료되었는지 확인하고 새로 고침된 액세스 토큰과 기타 관련 속성이 포함된 새 $accessToken 개체를 요청하기 위해 Refresh_token 속성을 사용합니다. .
이 시점에서 우리는 phpleague/oauth2-client 라이브러리를 사용하여 OAuth2 프로세스를 구현하는 방법을 배웠습니다. 이제 이를 사용하여 Google, Facebook, Twitter, GitHub 등 다양한 OAuth2 공급자에 액세스할 수 있습니다.
요약
이 기사에서는 OAuth2 라이브러리를 사용하여 OAuth2 클라이언트를 구축하고 클라이언트를 사용하여 인증을 받고 보호된 리소스에 액세스하는 방법을 배웠습니다. 또한 필요한 리소스에 항상 액세스할 수 있도록 액세스 토큰을 확인하고 새로 고치는 방법도 배웠습니다.
OAuth2 프로토콜에는 복잡한 인증 프로세스와 구현 세부 사항이 있으므로 OAuth2 클라이언트를 개발할 때 주의가 필요합니다. 그러나 기성 OAuth2 라이브러리를 사용하면 이 프로세스를 비교적 간단하고 간단하게 만들 수 있습니다.
위 내용은 PHP에서 OAuth2를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!