有没有办法非对称加密使用 Laravel Passport 创建的访问令牌?
Is there a way to Asymmetrically encrypt access tokens created with Laravel Passport?
我正在构建一个包含 3 个服务器的应用程序。第一个是我的Authorization server
,第二个是我的Database server(API)
,最后是我的front-end server
。我想使用非对称加密来加密我的 Authorization server
生成的访问令牌,这样敏感数据就不会受到损害,并且我可以将它发送到我的 API
并验证发出请求的用户实际上是他们自称的人。 Laravel Passport 中是否有任何东西可以使此实现成为可能,还是使用像 PASETO or PHP JWT Framework 这样的第三方库更好?
目前,当我向 Api
发出请求时
- Api 调用
Authorization server
以使用访问令牌验证用户。
Auth server
验证用户
- 如果用户验证,Api 提供我们要求的资源,否则 return 验证错误。
我想通过非对称加密实现的是在每次请求 API 之前消除对我的 Auth server
的调用,我读到我可以使用非对称加密实现这一点。
为了解决我的问题,我最终使用 SimpleJWT 库来加密访问令牌中的数据。数据在 JWE 声明中加密。
$headers = ['alg' => 'RSA-OAEP-256', 'enc' => 'A128CBC-HS256'];
$access_token = {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
// Creating JWE object with headers and claims
$jwe = new \SimpleJWT\JWE($headers, $claims);
$jwe_encrypted = $jwe->encrypt($foreing_server_public_key);
我后来使用 python 库 JWCrypto. I am thinking about making the switch to Authlib JOSE Guide 解密令牌,因为它似乎有更广泛的社区和支持。
//Decrypting JWE
//Private key should be key pair of public key used to encrypt token
jwetoken.deserialize(jwe_encrypted, key=private_key)
//Validating Signature since passport signs tokens when generating them
jwstoken.verify(auth_public_key)
//Payload should contain encrypted data
data = json.loads(jwstoken.payload.decode())
>> {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
我正在构建一个包含 3 个服务器的应用程序。第一个是我的Authorization server
,第二个是我的Database server(API)
,最后是我的front-end server
。我想使用非对称加密来加密我的 Authorization server
生成的访问令牌,这样敏感数据就不会受到损害,并且我可以将它发送到我的 API
并验证发出请求的用户实际上是他们自称的人。 Laravel Passport 中是否有任何东西可以使此实现成为可能,还是使用像 PASETO or PHP JWT Framework 这样的第三方库更好?
目前,当我向 Api
发出请求时- Api 调用
Authorization server
以使用访问令牌验证用户。 Auth server
验证用户- 如果用户验证,Api 提供我们要求的资源,否则 return 验证错误。
我想通过非对称加密实现的是在每次请求 API 之前消除对我的 Auth server
的调用,我读到我可以使用非对称加密实现这一点。
为了解决我的问题,我最终使用 SimpleJWT 库来加密访问令牌中的数据。数据在 JWE 声明中加密。
$headers = ['alg' => 'RSA-OAEP-256', 'enc' => 'A128CBC-HS256'];
$access_token = {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
// Creating JWE object with headers and claims
$jwe = new \SimpleJWT\JWE($headers, $claims);
$jwe_encrypted = $jwe->encrypt($foreing_server_public_key);
我后来使用 python 库 JWCrypto. I am thinking about making the switch to Authlib JOSE Guide 解密令牌,因为它似乎有更广泛的社区和支持。
//Decrypting JWE
//Private key should be key pair of public key used to encrypt token
jwetoken.deserialize(jwe_encrypted, key=private_key)
//Validating Signature since passport signs tokens when generating them
jwstoken.verify(auth_public_key)
//Payload should contain encrypted data
data = json.loads(jwstoken.payload.decode())
>> {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}