Access till version 2

Added by Alexander about 6 years ago

Hej,

Hur får jag access till version 2?

Just nu får jag status 401 och följande svar när jag försöker logga in:
{'message': 'Something went wrong when logging in.', 'code': 'NEXT_LOGIN_INVALID_LOGIN_PARAMETER'}

Mvh


Replies (5)

RE: Access till version 2 - Added by Erik about 6 years ago

Hej,

Det verkar fungera för mig nu.

MVH
/Erik

RE: Access till version 2 - Added by Alexander about 6 years ago

Hej,

Jag får fortfarande 401 som svar, vilket verkar betyda "Not Authorized - The user is not authorized to access this resource - usually due too invalid session. ...".

Är det något väsentligt som skiljer mellan versionerna i hur man loggar in, som jag kan ha missat? Behöver jag en annan public key-fil eller kan jag använda samma som i test-v1?

Mvh

RE: Access till version 2 - Added by Lars about 6 years ago

Anger du timestamp (som du krypterar tillsammans med användardata) i sekunder eller millisekunder? Det ska vara millisekunder i v2. (I v1 står det millisekunder i dokumentationen men jag fick det bara att fungera i praktiken med sekunder, så om du har tagit fungerande v1-kod och bara ändrat url så kan det vara det det beror på.)

Lars

RE: Access till version 2 - Added by Erik about 6 years ago

Hej,

Som jag förstår det kan Du använda samman nycklar. Och jag använder milliskunder, se bifogad java klass.

Vad har NordNet för support på dt här API:et egentligen, man börjar ju tveka om man vågar använda det...

(Det verkar inte gå att ladda upp filer, man får internal server error...).

8<----------------------------------------------------------------

package se.phaseshift.java;

import java.io.*;
import java.net.URLEncoder;
import javax.xml.bind.DatatypeConverter;

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

public class NordnetLoginHashFactory {
    private static final String PEM_BEGIN = "-----BEGIN PUBLIC KEY-----";
    private static final String PEM_END = "-----END PUBLIC KEY-----";

    private static String buildLoginString(String username, String password) {
    String userBase64 = DatatypeConverter.printBase64Binary(username.getBytes());
    String passwordBase64 = DatatypeConverter.printBase64Binary(password.getBytes()); 
    String timestamp = String.valueOf(System.currentTimeMillis());
    String timestampBase64 = DatatypeConverter.printBase64Binary(timestamp.getBytes());

    return userBase64 + ":" + passwordBase64 + ":" + timestampBase64;        
    }

    private static PublicKey readKeyFromPemFile(File file) throws Exception {
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String keydata = "";
    String line = reader.readLine();

    while(line != null) {
        keydata += (line.startsWith(PEM_BEGIN) || line.startsWith(PEM_END)) ? "" : line.trim();
        line = reader.readLine();
    }

    byte[] binary = DatatypeConverter.parseBase64Binary(keydata);

    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(binary);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");

    return keyFactory.generatePublic(keySpec);
    }

    public static String generateLoginHash(String username, String password, String keypath) throws Exception {
    File file = new File(keypath);
    PublicKey publicKey = readKeyFromPemFile(file);
    Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

    String login = buildLoginString(username, password);
        byte[] encryptedBytes = cipher.doFinal(login.getBytes("UTF-8"));
        String loginHash = DatatypeConverter.printBase64Binary(encryptedBytes);

        return URLEncoder.encode(loginHash, "UTF-8");
    }
}

-8-<----------------------------------------------------------------

MVH
/Erik

RE: Access till version 2 - Added by Alexander about 6 years ago

Hej,

Jag har alltid använt mig av millisekunder och har inte haft något problem pga det.

Nu funkar det i alla fall och om det är fler som stöter på samma problem så börja med att kolla om du har hårdkodat credentials någonstans... Dålig idé.

Tack för all hjälp ändå. Sånt uppskattas!

Mvh

(1-5/5)