>  기사  >  백엔드 개발  >  PHP에서 OAuth2를 사용하는 방법은 무엇입니까?

PHP에서 OAuth2를 사용하는 방법은 무엇입니까?

王林
王林원래의
2023-06-01 08:31:351477검색

OAuth2는 사용자 이름과 비밀번호를 Google, Facebook, Twitter와 같은 소셜 네트워크와 같은 제3자 애플리케이션에 직접 전송하지 않고 사용자 리소스에 대한 액세스 권한을 부여하는 데 사용되는 널리 사용되는 개방형 표준 프로토콜입니다.

PHP에서는 미리 만들어진 OAuth2 라이브러리를 사용하여 OAuth2 흐름을 쉽게 구현하거나 자체 라이브러리를 구축하여 구현할 수 있습니다.

이 기사에서는 기성 OAuth2 라이브러리 사용, OAuth2 프로토콜을 사용하여 사용자 인증을 받고 해당 리소스에 액세스하는 방법에 중점을 둘 것입니다.

  1. OAuth2 라이브러리 설치

먼저 사용 가능한 OAuth2 라이브러리를 설치해야 합니다. 현재 php-oauth2-client, thephpleague/oauth2-client 및 bshaffer/oauth2-server-php를 포함하여 PHP 개발에 사용할 수 있는 여러 가지 OAuth2 라이브러리가 있습니다. 이 글에서는 OAuth2 라이브러리로 phpleague/oauth2-client를 사용하겠습니다.

이 라이브러리를 설치하려면 Composer를 사용하여 터미널에서 다음 명령을 실행하면 됩니다.

composer require league/oauth2-client
  1. OAuth2 클라이언트 객체 생성

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를 제공해야 합니다.

  1. 인증 URL 가져오기

OAuth2에서 인증 URL은 OAuth2 인증 프로세스를 통해 사용자를 안내하는 데 사용됩니다. 애플리케이션에 필요한 GitHub 리소스에 액세스하기 전에 애플리케이션을 인증할 수 있도록 사용자를 인증 URL로 리디렉션해야 합니다.

인증 URL을 얻으려면 다음 코드를 사용하세요.

$authorizationUrl = $provider->getAuthorizationUrl();

위 코드는 사용자를 리디렉션해야 하는 인증 URL을 반환합니다.

header('Location: ' . $authorizationUrl);
exit;
  1. Get Access Token

사용자가 GitHub에서 OAuth2 승인을 성공적으로 수행하면 애플리케이션에서 제공하는 콜백 URL로 다시 리디렉션됩니다. 이 시점에서 이후에 인증이 필요한 GitHub 리소스에 액세스하려면 액세스 토큰을 얻어야 합니다.

다음으로 다음 코드를 사용하여 액세스 토큰을 얻을 수 있습니다.

$accessToken = $provider->getAccessToken('authorization_code', [
    'code' => $_GET['code']
]);

위 코드는 인증 코드를 사용하여 액세스 토큰을 요청하고 $accessToken 개체를 반환합니다. 이 $accessToken 객체에는 액세스 토큰과 만료 시간, 새로 고침 토큰 등과 같은 관련 속성이 포함되어 있습니다.

  1. 액세스 토큰을 사용하여 GitHub 리소스에 액세스

이제 액세스 토큰을 얻었으므로 이를 사용하여 사용자 정보를 얻거나 저장소 목록을 읽는 등 인증이 필요한 GitHub 리소스에 액세스할 수 있습니다.

다음 코드를 사용하여 사용자 정보를 가져옵니다.

$user = $provider->getResourceOwner($accessToken);
echo 'Hello, ' . $user->getName();

위 코드는 액세스 토큰을 사용하여 GitHub의 리소스 소유자 API를 호출하고 $user 개체를 반환합니다.

위 코드의 $user 개체는 사용자 및 기타 GitHub 리소스에 대한 정보를 얻는 데 사용할 수 있는 사용자 이름 및 기타 관련 속성을 반환합니다.

  1. 액세스 토큰 새로 고침

액세스 토큰이 만료되거나 유효하지 않게 될 수 있으므로 런타임에 상태를 확인하고 필요에 따라 토큰을 다시 새로 고쳐야 합니다.

다음 코드를 사용하여 액세스 토큰을 확인하고 새로 고치세요.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.