PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법
인터넷 서비스가 지속적으로 개발됨에 따라 시스템의 확장성과 유지 관리성을 향상시키기 위해 마이크로서비스 아키텍처를 채택하는 애플리케이션이 점점 더 많아지고 있습니다. 마이크로서비스 아키텍처에서는 인증 및 권한 제어가 매우 중요합니다. 이는 시스템 보안을 보호하고, 사용자 데이터의 기밀성을 보장하며, 승인된 사용자만 특정 리소스에 액세스할 수 있도록 보장합니다.
이 글에서는 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다.
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的方式来确认用户的身份。
在实现了身份验证后,我们还需要进行权限控制。我们可以创建一个 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; } } }
在微服务中的控制器中,我们可以使用 AuthController
和 Permission
类来实现身份验证和权限控制。
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
类的 checkPermission
rrreee
AuthController
클래스를 생성할 수 있습니다. rrreee
위 코드는 로그인 로직과 JWT 확인 로직을 구현합니다. 로그인 프로세스 중에 처음으로 JWT를 생성하여 사용자에게 반환합니다. 사용자는 각 요청의 헤더에 JWT를 포함해야 합니다. 서버는 JWT를 확인하여 사용자의 신원을 확인할 수 있습니다.
Permission
클래스를 만들 수 있습니다. 🎜rrreee🎜마이크로서비스의 컨트롤러에서는 AuthController
및 Permission
클래스를 사용하여 인증 및 권한 제어를 구현할 수 있습니다. 🎜rrreee🎜위 코드에서는 AuthController
클래스의 login
메서드를 호출하여 로그인 로직을 구현하고 반환된 JWT를 사용자에게 반환합니다. create
메소드에서는 먼저 verifyToken
메소드를 통해 JWT의 유효성을 확인한 후 Permission
의 checkPermission
을 호출합니다. code> class > Method는 사용자에게 사용자 생성 권한이 있는지 확인합니다. 🎜🎜요약🎜 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 것은 매우 중요한 부분입니다. JWT 인증과 권한 확인 클래스의 결합을 통해 안전하고 신뢰할 수 있는 인증 및 권한 제어를 달성할 수 있습니다. 위에 제공된 코드 예제는 이러한 기능을 빠르게 이해하고 구현하는 데 도움이 될 수 있습니다. 코드는 프로덕션 환경에서 더 자세하고 포괄적으로 테스트되어야 하며 실제 요구 사항에 따라 확장 및 최적화되어야 합니다. 🎜위 내용은 PHP 마이크로서비스에서 인증 및 권한 제어를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!