Parece que urlsafe_b64encode substitui alguns caracteres na codificação base64. Da documentação:
Codifica o objeto s semelhante a bytes usando o alfabeto seguro para URL e sistema de arquivos, que substitui
-em vez de+e_em vez de/no alfabeto Base64 padrão, e retorna osbytescodificados. O resultado ainda pode conter=.
Isso significa que o resultado não é base64 padrão e não será compatível com a decodificação do Discourse.
Eu recomendaria usar a função b64encode normal em vez disso. Sua biblioteca HTTP cuidará do escape de URL, se necessário.