You are correct base 64 is easily decodable, but the 2 sections (Header & Payload) that are based 64 encoded was not meant to be hidden.
Just a general introduction, a JWT token consists of 3 sections nl.
1.Header (Algorithm)
2.Payload (User Data)
3. Signature
The header and the payload contain non-sensitive data but this data provides enough information to assist you in identifying the user that presented you with the token. So for you to be able to grant him a refresh token or allow him access to some resource you need to know some information about him without the user having to give his credentials on each call.
So yes it is easily decoded but that is what the 3 section is for the signature. The Signature takes the header and the payload's base64 encodes values and hash them with some secret key. This is done so when the key comes in to your back end from the client we can first check to see if the payload (which could contain permissions) have note been altered or changed if they have the hash value of the token would not be the same anymore.
For more information you check ou the following resources:
https://jwt.io/ (To see structure)
https://jwt.io/introduction/ (General Info)