Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey

Added by Johan over 8 years ago

Hejsan

Har problem med att använda SessionKey. Jag får fel 401 när jag ska skicka kommandon till API't. Just nu testar jag med att hämta Nordnets "predefined instrument lists" via https://BASE_URL/API_VERSION/lists (självklart med rätt info i BaseURL + APIversion.

Kör login sekunden innan jag försöker med detta, så nyckeln är inte för gammal.

/Olof Rymark, via Johan Nygren

Jag använder denna kod (VB.net 3.5).. någon som har nåt tips:
(Skey är Session Key, requestPath är "lists")

Function GetGet(ByVal Skey As String, ByVal requestPath As String) As String
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Dim answer As String = ""

Try
' Create the web request
request = DirectCast(WebRequest.Create(nExtLogin.BASE_URL & "/" & nExtLogin.VERSION & "/" & requestPath), HttpWebRequest)
' Add authentication to request  
request.Credentials = New NetworkCredential(Skey, Skey)
' alternativt försök som inte funkar heller
'Dim nwc As NetworkCredential = New NetworkCredential(Skey, Skey)
'request.Credentials = nwc.GetCredential(New System.Uri(nExtLogin.BASE_URL & "/" & nExtLogin.VERSION & "/" & requestPath), "basic")
' Get response  
response = DirectCast(request.GetResponse(), HttpWebResponse)
' Get the response stream into a reader  
reader = New StreamReader(response.GetResponseStream())
' Console application output  
answer = reader.ReadToEnd()
Console.WriteLine(answer)
Finally
If Not response Is Nothing Then response.Close()
End Try
Return answer
End Function

Replies (5)

RE: Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey - Added by Johan over 8 years ago

Koden igen..

Function GetGet(ByVal Skey As String, ByVal requestPath As String) As String
        Dim request As HttpWebRequest
        Dim response As HttpWebResponse = Nothing
        Dim reader As StreamReader
        Dim answer As String = "" 

        Try
            ' Create the web request  
            request = DirectCast(WebRequest.Create(nExtLogin.BASE_URL & "/" & nExtLogin.VERSION & "/" & requestPath), HttpWebRequest)

            ' Add authentication to request  
            request.Credentials = New NetworkCredential(Skey, Skey)

            ' alternativt försök som inte funkar heller
            'Dim nwc As NetworkCredential = New NetworkCredential(Skey, Skey)
            'request.Credentials = nwc.GetCredential(New System.Uri(nExtLogin.BASE_URL & "/" & nExtLogin.VERSION & "/" & requestPath), "basic")

            ' Get response  
            response = DirectCast(request.GetResponse(), HttpWebResponse)

            ' Get the response stream into a reader  
            reader = New StreamReader(response.GetResponseStream())

            ' Console application output  
            answer = reader.ReadToEnd()
            Console.WriteLine(answer)
        Finally
            If Not response Is Nothing Then response.Close()
        End Try
        Return answer
    End Function

RE: Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey - Added by Johan over 8 years ago

Nu hittade jag supporten.. lägger in det som ett ärende där..

RE: Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey - Added by Nordnet Simon over 8 years ago

Hej Johan,

vi har sett liknande problem med .Net och Authentication Basic via Network Credentials.

Prova följande workaround - där header fältet sätts manuellt. Exemplet är i C#

byte[] authBytes = Encoding.UTF8.GetBytes((Skey+ ":" + Skey).ToCharArray());
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);

Det finns andra som har haft liknande problem där dom föreslagit liknande workaround: http://stackoverflow.com/questions/1702426/httpwebrequest-not-passing-credentials

/Simon

RE: Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey - Added by Nordnet Simon over 8 years ago

Hej Olof skulle det ha varit.

RE: Behörighet saknas, fel 401, vid använding av nyss erhållen SessionKey - Added by Johan over 8 years ago

Ditt tips löste problemet! Tack!

mvh

Olof Rymark (via Johan Nygrens)

Här är VB-koden, om det är någon annan som behöver den:

Dim authBytes As Byte() = Encoding.UTF8.GetBytes((Skey & ":" & Skey).ToCharArray)
request.Headers("Authorization") = "Basic " & Convert.ToBase64String(authBytes)

(1-5/5)