Hi Jonathan,
For me, the problem was creating the signature base
To create the Signature Base:
1- Get all of the parameters except "oauth signature" sent by Canvas with POST from the launch.
2- I made a loop for each parameter, and encode only Key and Values, they look like this: encodedKey=EncodedValue. I don't know which language you are using but, in c# it looks similar to this:
$"&{Uri.EscapeDataString(key)}={Uri.EscapeDataString(value)}
3- Sort them alphabetically with the Key names(&Key=Value)
4- Create a string from this list, and Encode this string one more time(the whole string).
5- Add the string you created to "POST&{Your Launch Url}&{The string you just created}"
After these, you will just create the signature with using this signature base which is the standard way. I hope this will help.