andreroggeri/pynubank

Geração de certificado não está funcionando

lrezende opened this issue · 18 comments

Meu certificado expirou. Fui executar o normalmente o pynubank. Estava recebendo um NuException.
Primeiro pensamento é a senha. Então fui verificar se o motivo era porque a resposta estava retornando 401 ou porque o cabeçalho não estava na resposta.
Fiz o teste errando a senha e recebi um 401. Depois coloquei a senha certa e percebi que o cabeçalho WWW-Authenticate não estava retornando depois do post.

O erro ocorre após a chamada abaixo no arquivo certificate_generator.py:
response = requests.post(self.url, json=self._get_payload())

Pelo que entendi do código, esse response deveria ter o referido header.

Os cabeçalhos retornados foram:

content-security-policy object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
Content-Type application/json;charset=utf-8
Referrer-Policy same-origin
Strict-Transport-Security max-age=31536000; includeSubdomains
X-Content-Type-Options nosniff
X-Download-Options noopen
x-frame-options DENY
x-http2-stream-id 12093
X-Permitted-Cross-Domain-Policies none
x-signature ***
x-xss-protection 1; mode=block
Content-Length 24
Connection keep-alive

Aparentemente a API de autenticação mudou 😢

Eu testei aqui e sempre estou levando 401 nessa url

Aqui não levo 401; é o header que está faltando.

Aparentemente a API de autenticação mudou 😢

Eu testei aqui e sempre estou levando 401 nessa url

Olá, pessoal! Eu também estou passando pelo mesmíssimo problema que o @lrezende =/

Confirmando aqui também. Até semana passada estava tudo ok

Pelo o que vi/copiei da implementação do pynubank do @andreroggeri, é esperado o retorno 401 dessa url, então até aí nada de novo. O problema mesmo está no header não possuir mais o atributo WWW-Authenticate. Ao autenticar novamente em um projeto em node que tenho notei hoje esse problema.

E assim não temos como pegar o encrypted-code e o sent-to.

Fiquei curioso com o atributo x-signature do header. Como teste, tentei enviá-lo ao invés do código que vinha no encrypted-code, juntamente com o meu email cadastrado no Nubank e não recebi o email com o código

Alguém tem ideia de como ficou o novo fluxo de autenticação, eu fiz um port do pynubank para Kotlin para cobrir quem usa Kotlin/JVM e Java como eu, estava funcionando bem, quando ia abrir o código o processo de login mudou 🤦🏻‍♀️

Por aqui estou tendo o mesmo problema que o @lrezende

Mesmo problema aqui

CTXO commented

Também estou com o mesmo problema

glira commented

mesmo problema

Provavelmente todos terão o mesmo problema.

Enquanto não for ajustando aqui na biblioteca, a geração de certificado NÃO irá funcionar.

Eu estou sem tempo para olhar isso agora, mas qualquer contribuição é bem vinda.

glira commented

Boa noite pessoal, alguém com conhecimento para saber se este projeto está conseguindo gerar o certificado?
como não é python pra mim fica difícil roda isso ai estou tentando mas apanhando https://github.com/fmsouza/nubank-api/blob/master/examples/generate-certificate.ts
se alguém conseguir com isso ai talvez consigamos continua usando a api aqui.

Numa lida rápida vi, que ao menos em relação a autenticação via certificado, é feito exatamente como no pynubank, ou seja, via obtenção do atributo www-authenticate do header, por sua vez o encrypted-code e etc.

A função é essa aqui: https://github.com/fmsouza/nubank-api/blob/10e3fa5e6164148b2f1abf1a43a8f42f094a2267/src/auth.ts#L93

De qualquer forma, o projeto do colega é bem legal.

Quem tiver interesse em ajudar, principalmente via frida, tem uma discussão bem adiantada aqui:

#325

Só deixando meus 2¢ aqui já que meu projeto andou sendo citado acima - o projeto em TypeScript é só uma tradução desse aqui pra funcionar na runtime vizinha também. E como não tenho mais interesse pessoal nessa integração, só ajusto lá quando tem novidades aqui por amor mesmo, só proque sei que é útil.

Dito isso, acabei de testar lá e vi que a geração de certificados ta funcionando. O que não ta mais funcionando é a etapa do login, que é onde ta dando o 401.

Vou continuar acompanhando a thread também pra atualizar o código lá assim que houver novidades.

Edit: Correção - fiz tudo na pressa aqui e esqueci de colocar o CPF/senha certos no exemplo de login, ajustei e funcionou. Lá no meu repo ta tudo funcionando! Acabei de fazer login e depois acessar o feed e baixar a lista toda do meu extrato. 🎉

Só deixando meus 2¢ aqui já que meu projeto andou sendo citado acima - o projeto em TypeScript é só uma tradução desse aqui pra funcionar na runtime vizinha também. E como não tenho mais interesse pessoal nessa integração, só ajusto lá quando tem novidades aqui por amor mesmo, só proque sei que é útil.

Dito isso, acabei de testar lá e vi que a geração de certificados ta funcionando. O que não ta mais funcionando é a etapa do login, que é onde ta dando o 401.

Vou continuar acompanhando a thread também pra atualizar o código lá assim que houver novidades.

Edit: Correção - fiz tudo na pressa aqui e esqueci de colocar o CPF/senha certos no exemplo de login, ajustei e funcionou. Lá no meu repo ta tudo funcionando! Acabei de fazer login e depois acessar o feed e baixar a lista toda do meu extrato. tada

Não duvidando do @fmsouza, mas precisava ver com meus olhos. Baixei o projeto fmsouza/nubank-api, executei o arquivo generate-certificate.ts e confirmei: está funcionando. Recebi o email com o código de acesso e tudo o mais. Obrigado @fmsouza!

Vou dar agora uma investigada e comparar a implementação dele com a minha. Tem algum passo diferente no projeto dele em relação ao pynubank e ao meu projeto. Quando achar, jogo aqui

@diegomdrs meu chute seria o X-Correlation-Id
No projeto do @fmsouza está usando o WEB-APP.pewW9 que é bem antigo e algumas queries não funcionam mais, talvez podemos usar esse correlation id pra gerar o certificado e o novo pra fazer as queries.

@andreroggeri Foi exatamente esse cara que resolveu parte do meu problema aqui. Adicionando esse cara ao header da requisição do request_code, voltei a receber os emails com os códigos de acesso do Nubank.

To tomando um erro agora no exchange-key, mas acho que é mais relacionado ao meu projeto mesmo do que com o fluxo que copiei do pynubank

EDIT: O problema com o exchange-key era coisa do meu projeto mesmo. Voltou tudo a funcionar por aqui, inclusive as queries de saldo de CC (account_balance) e extrato de CC (account_feed). Como não implementei as outras queries, não testei ainda.

@diegomdrs meu chute seria o X-Correlation-Id No projeto do @fmsouza está usando o WEB-APP.pewW9 que é bem antigo e algumas queries não funcionam mais, talvez podemos usar esse correlation id pra gerar o certificado e o novo pra fazer as queries.

EDIT 2: Aparentemente o X-Correlation-Id só foi necessário na obtenção do código de acesso e geração do certificado. Para executar as queries, como também ao chamar outros endpoints, não tive problemas ao não utilizar o X-Correlation-Id

@andreroggeri Foi exatamente esse cara que resolveu parte do meu problema aqui. Adicionando esse cara ao header da requisição do request_code, voltei a receber os emails com os códigos de acesso do Nubank.

To tomando um erro agora no exchange-key, mas acho que é mais relacionado ao meu projeto mesmo do que com o fluxo que copiei do pynubank

EDIT: O problema com o exchange-key era coisa do meu projeto mesmo. Voltou tudo a funcionar por aqui, inclusive as queries de saldo de CC (account_balance) e extrato de CC (account_feed). Como não implementei as outras queries, não testei ainda.

@diegomdrs meu chute seria o X-Correlation-Id No projeto do @fmsouza está usando o WEB-APP.pewW9 que é bem antigo e algumas queries não funcionam mais, talvez podemos usar esse correlation id pra gerar o certificado e o novo pra fazer as queries.

EDIT 2: Aparentemente o X-Correlation-Id só foi necessário na obtenção do código de acesso e geração do certificado. Para executar as queries, como também ao chamar outros endpoints, não tive problemas ao não utilizar o X-Correlation-Id

Testei no meu port para Kotlin e parece ser isso mesmo, voltou a funcionar 🥰

Obrigado pessoal, problema resolvido na versão 2.25.0