3

我正在构建一个由 3 个服务器组成的应用程序。第一个是我Authorization server的,第二个是我的Database server(API),最后是我的front-end server。我想使用非对称加密来加密我生成的访问令牌,Authorization server这样敏感数据就不会被泄露,并且我可以将它发送给我API并验证发出请求的用户实际上是他们声称的那个人。Laravel Passport 中是否有任何东西可以使这个实现成为可能,还是使用第三方库(如PASETOPHP JWT Framework )更好?

目前,当我向 Api 发出请求时

  1. Api 调用 以Authorization server使用访问令牌验证用户。
  2. 验证Auth server用户
  3. 如果用户验证,Api 会提供我们要求的资源,否则返回验证错误。

我想用非对称加密实现的是Auth server在每次请求 API 之前消除对我的调用,我读到我可以使用非对称加密来实现这一点。

4

1 回答 1

0

为了解决我的问题,我最终使用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解密令牌。我正在考虑切换到Authlib JOSE 指南,因为它似乎拥有更广泛的社区和支持。

//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}
于 2019-04-30T16:23:48.537 回答