Передача JWT в заголовок запроса не работает в Groovy скрипте - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь получить доступ к данным CI из CMDB (атриум BMC) с помощью скрипта groovy, и он выполняется в два этапа.

Сначала отправьте запрос POST для входа в систему api и получите маркер авторизации.

Во-вторых, чтобы использовать этот токен в последующих вызовах API.

Я протестировал оба API в почтальоне, и они работают нормально.

Часть получения токена работает нормально в Groovyсценарий, но для части выборки данных CI с использованием этого токена возвращается ошибка json:

"JsonResponse is [{" messageType ":" ERROR "," messageText ":" Необходимо указать имя пользователяв контрольной записи "," messageAppendedText ": null," messageNumber ": 149}]"

Вот забавная часть, я вернулся к почтальону, а в заголовке авторизации я просто поместил свежуюсгенерированный токен, и он дал мне ту же ошибку JSON, как упомянуто выше.И когда я добавил «AR-JWT» со значением токена в заголовке авторизации - все работало нормально!

Я попытался передать в заголовок разные значения, такие как - AuthenticationInfoValue.authentication = username, Authorization-Type, usernameи пароль и т. д., но, похоже, ничего не работает.

Я проверил официальный сайт BMC для документации, но в соответствии с этим я все делаю правильно.Если кто-то может указать на то, что я делаю неправильно, это действительно помогло бы.

вот отличный сценарий

    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7')
    //post call to get the token
    def token
    def httpRequester = new 
    groovyx.net.http.HTTPBuilder("http://<localhost>:<port>/api/jwt/login");
    httpRequester.request(groovyx.net.http.Method.POST) { req ->
    requestContentType = groovyx.net.http.ContentType.URLENC
    body = [username:'user', password:'pass']

    response.success = { resp , reader ->
                    println "response success"                
                    httpResponse = resp
                    println "httpResponse : "+httpResponse
                    token = reader.getText()
                    println "token : "+token
                }

                response.failure = { resp , reader ->
                    println "response failure"                
                    httpResponse = resp
                    println "httpResponse : "+httpResponse
                    token = reader.getText()  
                    println "token : "+token                  
                 }
            }
    //Get call to fetch the CI Data
    httpRequester = new groovyx.net.http.HTTPBuilder("http://<localhost>:<port>/api/arsys/v1/entry/AST:ComputerSystem")
    def finalToken = "AR-JWT" + " " + token ;
    httpRequester.request(groovyx.net.http.Method.GET) { req ->
    println "Inside request"
    def headerMap = ['Content-Type': 'application/x-www-form-urlencoded' , 
    'Authorization': finalToken]
    httpRequester.setHeaders(headerMap)
    println "headers  :  "+httpRequester.getHeaders()
    requestContentType = groovyx.net.http.ContentType.URLENC
    response.success = { resp, json ->
                    println "response success"                
                    httpResponse = resp
                    jsonResponse = json
                }

                response.failure = { resp, json ->
                    println "response failure"                
                    httpResponse = resp
                    jsonResponse = json
                }
            }



            jsonResponse = new groovy.json.JsonBuilder(jsonResponse);
            println "JsonResponse is" +jsonResponse.toString();

1 Ответ

0 голосов
/ 16 мая 2018

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

В вызове GET API пришлось установить заголовки, как показано ниже.

headers.'Content-Type'='application/x-www-form-urlencoded'
​headers.'Authorization'=finalToken

И закомментируйте или удалите строки ниже.

    //def headerMap = ['Content-Type': 'application/x-www-form-urlencoded' , 'Authorization': finalToken]
    //httpRequester.setHeaders(headerMap)
...