Parece que urlsafe_b64encode reemplaza algunos caracteres en la codificación base64. De la documentación:
Codifica el objeto similar a bytes bytes-like object s usando el alfabeto seguro para URL y sistemas de archivos, que sustituye
-en lugar de+y_en lugar de/en el alfabeto Base64 estándar, y devuelve losbytescodificados. El resultado aún puede contener=.
Eso significa que el resultado no es base64 estándar y no será compatible con la decodificación de Discourse.
Recomiendo usar la función b64encode normal en su lugar. Su biblioteca HTTP debería encargarse del escape de URL si es necesario.