>  기사  >  백엔드 개발  >  PHP의 OAuth: 인증 코드 인증 서버 생성

PHP의 OAuth: 인증 코드 인증 서버 생성

WBOY
WBOY원래의
2023-07-31 14:05:191676검색

PHP의 OAuth: 인증 코드 인증 서버 만들기

OAuth는 타사 애플리케이션이 사용자 리소스에 액세스하도록 인증하기 위한 개방형 표준입니다. 이는 사용자를 리소스 서버로부터 격리하고 보다 안전하고 안정적인 인증 프로세스를 구현하는 HTTP 프로토콜을 기반으로 구축되었습니다. 이 기사에서는 PHP에서 인증 코드 인증 서버를 만드는 방법을 소개합니다.

인증 코드 인증은 OAuth2에서 가장 일반적으로 사용되는 인증 유형입니다. 해당 작업 흐름은 다음과 같습니다.

  1. 클라이언트가 인증 서버에 인증 요청을 시작합니다.
  2. 인증 서버는 사용자의 신원을 확인하고 사용자에게 인증을 요청합니다.
  3. 사용자가 인증에 동의하면 인증 서버는 클라이언트에게 인증 코드를 발급합니다.
  4. 클라이언트는 인증 코드, 클라이언트 ID, 클라이언트 키 및 기타 정보를 사용하여 인증 서버에 토큰을 요청합니다.
  5. 인증 서버는 클라이언트 정보와 인증 코드를 확인하고 액세스 토큰을 발급합니다.
  6. 클라이언트는 액세스 토큰을 사용하여 리소스 서버에서 사용자의 리소스에 대한 액세스를 요청합니다.

먼저 "bshaffer/oauth2-server-php"와 같은 인기 있는 PHP OAuth2 라이브러리를 설치해야 합니다. 이 라이브러리는 Composer를 사용하여 프로젝트에 추가할 수 있습니다.

composer require bshaffer/oauth2-server-php

다음으로 인증 코드 인증 서버로 index.php 파일을 생성합니다.

<?php
require_once 'vendor/autoload.php';

// 创建一个PDO实例
$dsn = "mysql:dbname=testdb;host=localhost";
$username = "root";
$password = "";
$pdo = new PDO($dsn, $username, $password);

// 创建一个存储库实例
$storage = new OAuth2StoragePdo($pdo);

// 创建一个授权服务器实例
$server = new OAuth2Server($storage);

// 添加支持的授权类型
$server->addGrantType(new OAuth2GrantTypeAuthorizationCode($storage));

// 处理授权请求
$request = OAuth2Request::createFromGlobals();
$response = new OAuth2Response();
if (!$server->validateAuthorizeRequest($request, $response)) {
    $response->send();
    die;
}
// 显示授权页面
if (empty($_POST)) {
    exit('
        <form method="post">
          <label for="username">Username:</label>
          <input type="text" id="username" name="username"><br><br>
          <label for="password">Password:</label>
          <input type="password" id="password" name="password"><br><br>
          <input type="submit" value="Authorize">
        </form>
    ');
}

// 处理授权请求
$is_authorized = ($_POST['username'] == 'admin' && $_POST['password'] == 'admin');
$server->handleAuthorizeRequest($request, $response, $is_authorized);
if ($is_authorized) {
    $response->send();
} else {
    echo '授权失败';
}

다음으로 클라이언트 정보를 저장할 데이터베이스 테이블을 생성해야 합니다. MySQL 데이터베이스에서 다음 SQL 문을 실행합니다.

CREATE TABLE `oauth_clients` (
  `client_id` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `client_secret` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `redirect_uri` varchar(2000) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `grant_types` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  `scope` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_id` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`client_id`)
);

이제 테스트용 인증 코드를 사용하여 서버에 권한을 부여할 수 있습니다.

브라우저에서 http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE를 방문하고 YOUR_CLIENT_ID를 클라이언트 ID로 바꾸고 YOUR_REDIRECT_URI를 리디렉션 URI로 바꾸고 SCOPE를 액세스하려는 리소스 범위로 바꿉니다. http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE,将 YOUR_CLIENT_ID 替换为你的客户端ID,YOUR_REDIRECT_URI 替换为你的重定向URI,SCOPE 替换为你想要访问的资源范围。

授权服务器将要求你输入用户名和密码。在本例中,用户名和密码均为 "admin"。输入正确的用户名和密码后,将会收到一个授权码作为响应。

接下来,我们可以使用授权码向授权服务器请求访问令牌。使用curl或其他HTTP客户端发出以下请求:

curl -X POST -d "grant_type=authorization_code&code=AUTHORIZATION_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REDIRECT_URI" http://localhost/token.php

AUTHORIZATION_CODE 替换为收到的授权码,YOUR_CLIENT_IDYOUR_CLIENT_SECRETYOUR_REDIRECT_URI

인증 서버에서 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. 이 예에서는 사용자 이름과 비밀번호가 모두 "admin"입니다. 올바른 사용자 이름과 비밀번호를 입력하면 응답으로 인증 코드를 받게 됩니다.

다음으로 인증 코드를 사용하여 인증 서버에 액세스 토큰을 요청할 수 있습니다. 컬 또는 다른 HTTP 클라이언트를 사용하여 다음 요청을 수행하세요.

rrreee

AUTHORIZATION_CODE를 받은 승인 코드인 YOUR_CLIENT_ID, YOUR_CLIENT_SECRET 및 YOUR_REDIRECT_URI를 클라이언트 ID, 클라이언트 비밀번호 및 리디렉션 URI로 바꾸세요. 🎜🎜모든 것이 정상이라면 이에 대한 응답으로 액세스 토큰을 받게 됩니다. 🎜🎜위는 PHP에서 인증 코드 인증 서버를 생성하는 세부 단계입니다. OAuth를 사용하면 보다 안전하고 안정적인 인증 프로세스를 제공하여 사용자 데이터와 개인정보를 보호할 수 있습니다. 이 글이 OAuth 인증을 이해하고 사용하는 데 도움이 되기를 바랍니다. 🎜

위 내용은 PHP의 OAuth: 인증 코드 인증 서버 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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