Bom, eu usei uma dinâmica e está funcionando, basicamente são dois métodos, um pega o "Code" e o outro o "Token". Está em C# mas dá pra entender:
getCode(string code = "") {
if (code =="")
{
Redirect($"https://api.sisbr.com.br/auth/oauth2/authorize?response_type=code&redirect_uri=https://www.seusite/sistema.com.br/api/&client_id=seuClientID&versaoHash=3&scope=cobranca_boletos_consultar+cobranca_boletos_incluir");
}
else
{
Token token = getToken(code);
}
return Redirect($"https://www.seusite/sistema.com.br");
}
getToken(string code)
{
Token token = new Token();
var client = new RestClient("https://apis.sisbr.com.br/cooperado/cobranca-bancaria/mtls/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Authorization", oauthConfig.Token_Basic);
request.AddParameter("grant_type", "authorization_code");
request.AddParameter("code", code);
request.AddParameter("redirect_uri", oauthConfig.Redirect_uri);
IRestResponse response = client.Execute(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
token = Newtonsoft.Json.JsonConvert.DeserializeObject<OauthToken>(response.Content);
}else{
token.Error = Newtonsoft.Json.JsonConvert.DeserializeObject<Error>(response.Content);
}
token;
}