Передача JWT в заголовок запроса не работает в Groovy скрипте
Я пытаюсь получить доступ к данным 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 = имя пользователя, тип авторизации, имя пользователя и пароль и т. Д., Но ничего не работает.
Я проверил официальный сайт 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 ответ
Я нашел проблему после многих отладок, и оказалось, что это было довольно глупо.
В вызове 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)