Får NEXT_INVALID_SESSION när jag anropar /accounts.

Added by john over 1 year ago

Förlåt för en nybörjarfråga.

Jag har försökt skriva ihop en kod för att komma igång med att prata med Nordnets API, men jag kan inte få auth att fungera i mina anrop efter inloggningen.

När jag kör koden nedan så får jag NEXT_INVALID_SESSION som svar, och jag förstår inte vad jag gör för fel.

Finns det någon som skulle kunna hjälpa mig?

USERNAME = 'NNNNN'
PASSWORD = 'PPPPP'
SERVICE = 'NEXTAPI'
URL = 'api.test.nordnet.se'
API_VERSION = '2'

def main():
auth_hash = get_hash(USERNAME, PASSWORD)

headers = {"Accept": "application/json"}
conn = http.client.HTTPSConnection(URL)
R = requests.get('https://' + URL + '/next/' + API_VERSION + '/', headers=headers)
Rdata = json.loads(R.text)
print(Rdata)
print("")
R = requests.post('https://' + URL + '/next/' + API_VERSION + '/login',{'service': 'NEXTAPI', 'auth': auth_hash}, headers=headers)
Rdata = json.loads(R.text)
print(Rdata)
print("")
session_key=Rdata['session_key']
R = requests.get('https://' + URL + '/next/' + API_VERSION + '/accounts',{'service': 'NEXTAPI','Accept-Language':'sv', 'auth': {session_key}}, headers=headers)
#R = requests.get('https://' + URL + '/next/' + API_VERSION + '/accounts',{'service': 'NEXTAPI','Accept-Language':'sv', 'auth': {'username':session_key, 'password':session_key}}, headers=headers)
print(R)
Rdata = json.loads(R.text)
print(Rdata)

Replies (2)

RE: Får NEXT_INVALID_SESSION när jag anropar /accounts. - Added by john over 1 year ago

Svaret var:

session_key = Rdata['session_key'] + ':' + Rdata['session_key']
b64_auth = base64.b64encode(bytes(session_key, encoding='utf-8')).decode("utf-8")
headers = {"Accept": "application/json",'Accept-Language':'sv'}
headers['Authorization'] = 'Basic ' + b64_auth

RE: Får NEXT_INVALID_SESSION när jag anropar /accounts. - Added by David over 1 year ago

Testa

requests.get('https://' + URL + '/next/' + API_VERSION + '/accounts', headers=headers, auth = (session_key, session_key))

Jag använder:

    @property
    def __hash(self):
        timestamp = int(round(time.time() * 1000))
        a = self.__nc.USERNAME, self.__nc.PWD, str(timestamp)
        buf = ':'.encode('ascii').join([base64.b64encode(x.encode('ascii')) for x in a])
        keyDER = base64.b64decode(self.__nc.PUB_KEY)
        keyPub = RSA.importKey(keyDER)
        encrypted_hash = rsa.encrypt(buf, keyPub)
        return base64.b64encode(encrypted_hash)

    def login(self):
        d = self.__post('/login', data={'service': 'NEXTAPI', 'auth': self.__hash})
        self.__loginResponse = nm.NordetLoginResponse(**d)
        self.__auth = self.__loginResponse.session_key, self.__loginResponse.session_key

Jag skickar med auth som keyword arg (s är en session).

r = s.request(method, self.url + action, headers=self.headers, auth=self.__auth, **kwargs)

(1-2/2)