Posting this as an answer as I cannot comment yet:
What is the best way to encrypt each request?
I think forcing your server to run on HTTPS should offer enough encryption, as it obscures most information associated for a REST call such as query or form parameters to a point where an eavesdropper can only make vague assumptions about their respective lengths.
I saw JWE but it seems that it encrypt only the JWT and it's not clear how to implement JWE with an openid external provider
Yes, JWE only obscures the token's contents, which might be desirable depending on whether they hold claims you regard as sensible information such as the user's E-mail address or the issuing organization`s tenant id (none of these are regarded confidential by Azure AD itself). Whether JWE is supported depends on the provider; Azure AD for instance does so. You will have to generate a secret in your app registration to decrypt the tokens on your resource server.
But be aware that JWE only is not a sufficient way to encrypt your communication, as an attacker could still just snatch a token off of an unencrypted request and use it maliciously on his behalf.