2015-01-24 3 views
1

Я пытаюсь подключиться к веб-соединению с URL-адресом (клиент python), который должен иметь переданный токен jwt, и сервер (реализованный в GO) прослушивает этот запрос и должен аутентифицироваться путем разбора маркера.WebSocket JWT Разрешение подключения токена

Я стараюсь использовать эту часть кода, чтобы сделать запрос -

def test_auth_token(token) 
    conn = create_connection("ws://<IP>:port"+ '/'+ container.uuid + '?token='+token) 
    result = conn.recv() 
    assert result is not None 

Этого запрос попадет на сервере, который запускает этот код для проверки этого запроса

Func ParseFromRequest (Req * http.Request , keyFunc keyfunc) (маркер * маркер, ERR ошибка) {

// Look for an Authorization header 
if ah := req.Header.Get("Authorization"); ah != "" { 
    // Should be a bearer token 
    if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" { 
     return Parse(ah[7:], keyFunc) 
    } 
} 

// Look for "access_token" parameter 
req.ParseMultipartForm(10e6) 
if tokStr := req.Form.Get("access_token"); tokStr != "" { 
    return Parse(tokStr, keyFunc) 
} 

return nil, ErrNoTokenInRequest 

}

Каждый раз, когда я получаю вывод «ErrNoTokenInRequest», несмотря на то, что передаю токен в качестве параметра запроса. Проверка подлинности на стороне сервера выполняется этой внешней библиотекой, которая содержит вышеуказанную GO-процедуру. https://github.com/dgrijalva/jwt-go/blob/master/jwt.go

Я не уверен, каковы могут быть причины, по которым сервер не находит маркер, отправленный на моем клиенте? Должен ли он быть отправлен как полезная нагрузка или заголовки или что-то еще? Может ли кто-нибудь указать, что этот модуль работает?

С «access_token» в качестве параметра запроса я получаю это исключение -

self = <websocket._core.WebSocket object at 0x10a15a6d0> 
host = 'x.x.x.x.', port = 9345 
resource = '/v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI6ImNh...vxvBmtZRrUTY5AcvrjbojXqLxFHL_CMsmTZfTXhOiy-7W2V95bqts2Wy4R8oQvsfDylYJWCBTzZNKHvPVFpcl0jQKLm1ms-LOJg1w-k23VfojZucPGtY5A' 
options = {} 
headers = ['GET /v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI... 'Host: x.x.x.x.:9345', 'Origin: http://x.x.x.x.:9345', 'Sec-WebSocket-Key: BN1n2BcCT/CUGh9MHeyL5g==', ...] 
key = 'BN1n2BcCT/CUGh9MHeyL5g==' 
header_str = 'GET /v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI6...3:9345 
Origin: http://192.168.59.103:9345 
Sec-WebSocket-Key: BN1n2BcCT/CUGh9MHeyL5g== 
Sec-WebSocket-Version: 13 
+0

Давайте [продолжить это обсуждение в чате] (http://chat.stackoverflow.com/rooms/69523/discussion-between-psbits-and-thwd). – psbits

ответ

1

Довольно просто служить не ожидает, что маркер будет передан в качестве параметра запроса, но вместо этого ожидает, что он будет включен в заголовках запроса.

Пример использования библиотеки WebSocket из https://github.com/liris/websocket-client

def test_auth_token(token) 
    header="Authorization: BEARER " + str(token) 
    conn = create_connection("ws://<IP>:port"+ '/'+ container.uuid", header) 
    result = conn.recv() 
    assert result is not None 
Смежные вопросы