>백엔드 개발 >PHP 튜토리얼 >PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법

PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법

WBOY
WBOY원래의
2023-09-24 15:17:02635검색

PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법

PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법

인터넷 서비스가 지속적으로 개발됨에 따라 시스템의 확장성과 유지 관리성을 향상시키기 위해 마이크로서비스 아키텍처를 채택하는 애플리케이션이 점점 더 많아지고 있습니다. 마이크로서비스 아키텍처에서는 인증 및 권한 제어가 매우 중요합니다. 이는 시스템 보안을 보호하고, 사용자 데이터의 기밀성을 보장하며, 승인된 사용자만 특정 리소스에 액세스할 수 있도록 보장합니다.

이 글에서는 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다.

1. JWT 인증

Json Web Token(JWT)은 인증 및 승인을 위해 객체를 안전하게 전송하는 방법입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 먼저 JWT 인증을 구현하려면 firebase/php-jwt 라이브러리를 설치해야 합니다. firebase/php-jwt 库来实现JWT身份验证。

composer require firebase/php-jwt

接下来,我们可以创建一个 AuthController 类,用于处理用户身份验证相关的逻辑。

use FirebaseJWTJWT;

class AuthController {
    private $secret = "your-secret-key";

    public function login($username, $password) {
        // 验证用户名和密码
        if ($username == "admin" && $password == "password") {
            // 生成JWT
            $tokenId = base64_encode(random_bytes(32));
            $issuedAt = time();
            $expire = $issuedAt + 60; // Token 有效期为60秒

            $data = [
                'iat' => $issuedAt,
                'jti' => $tokenId,
                'exp' => $expire,
                'data' => [
                    // 可以存储用户ID、权限等信息
                    'userId' => 1,
                    'role' => 'admin'
                ]
            ];

            $jwt = JWT::encode($data, $this->secret, 'HS256');

            return $jwt;
        } else {
            throw new Exception('Invalid credentials');
        }
    }

    public function verifyToken($jwt) {
        try {
            $decoded = JWT::decode($jwt, $this->secret, ['HS256']);
            return (array) $decoded->data;
        } catch (Exception $e) {
            throw new Exception('Invalid token');
        }
    }
}

以上代码实现了登录逻辑和验证JWT的逻辑。在登录过程中,我们首次生成JWT,并将其返回给用户。用户在每次请求时,需要在请求的头部中包含JWT。服务器可以通过验证JWT的方式来确认用户的身份。

2. 权限控制

在实现了身份验证后,我们还需要进行权限控制。我们可以创建一个 Permission 类,用于检查用户权限。

class Permission {
    public function checkPermission($role, $resource) {
        // 根据用户角色和资源来检查权限
        $permissions = [
            'admin' => ['create', 'read', 'update', 'delete'],
            'user' => ['read', 'create']
        ];

        if (isset($permissions[$role]) && in_array($resource, $permissions[$role])) {
            return true;
        } else {
            return false;
        }
    }
}

在微服务中的控制器中,我们可以使用 AuthControllerPermission 类来实现身份验证和权限控制。

class UserController {
    private $authController;
    private $permission;

    public function __construct() {
        $this->authController = new AuthController();
        $this->permission = new Permission();
    }

    public function create($username, $password) {
        // 验证用户身份
        $jwt = $this->authController->login($username, $password);

        // 可以将生成的JWT存储在会话、Cookie或者返回给客户端
        // ...

        // 检查用户权限
        $decoded = $this->authController->verifyToken($jwt);

        if ($this->permission->checkPermission($decoded['role'], 'create')) {
            // 创建用户的逻辑
            // ...
        } else {
            throw new Exception('Permission denied');
        }
    }
}

在上述代码中,我们调用了 AuthController 类的 login 方法来实现登录逻辑,并将返回的JWT返回给用户。在 create 方法中,我们先通过 verifyToken 方法验证JWT的有效性,然后再调用 Permission 类的 checkPermissionrrreee

다음으로, 사용자 인증 관련 로직을 처리하기 위해 AuthController 클래스를 생성할 수 있습니다.

rrreee
위 코드는 로그인 로직과 JWT 확인 로직을 구현합니다. 로그인 프로세스 중에 처음으로 JWT를 생성하여 사용자에게 반환합니다. 사용자는 각 요청의 헤더에 JWT를 포함해야 합니다. 서버는 JWT를 확인하여 사용자의 신원을 확인할 수 있습니다.

🎜2. 권한 제어🎜🎜인증을 구현한 후에는 권한 제어도 수행해야 합니다. 사용자 권한을 확인하기 위해 Permission 클래스를 만들 수 있습니다. 🎜rrreee🎜마이크로서비스의 컨트롤러에서는 AuthControllerPermission 클래스를 사용하여 인증 및 권한 제어를 구현할 수 있습니다. 🎜rrreee🎜위 코드에서는 AuthController 클래스의 login 메서드를 호출하여 로그인 로직을 구현하고 반환된 JWT를 사용자에게 반환합니다. create 메소드에서는 먼저 verifyToken 메소드를 통해 JWT의 유효성을 확인한 후 PermissioncheckPermission을 호출합니다. code> class > Method는 사용자에게 사용자 생성 권한이 있는지 확인합니다. 🎜🎜요약🎜 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 것은 매우 중요한 부분입니다. JWT 인증과 권한 확인 클래스의 결합을 통해 안전하고 신뢰할 수 있는 인증 및 권한 제어를 달성할 수 있습니다. 위에 제공된 코드 예제는 이러한 기능을 빠르게 이해하고 구현하는 데 도움이 될 수 있습니다. 코드는 프로덕션 환경에서 더 자세하고 포괄적으로 테스트되어야 하며 실제 요구 사항에 따라 확장 및 최적화되어야 합니다. 🎜

위 내용은 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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