cityiq API时出现“未经授权”响应

时间:2018-11-13 03:46:55

标签: javascript cityiq

我正在尝试访问由GE CityIQ API驱动的Current开发一个停车应用程序,我遵循了API文档,但是由于没有访问令牌,我似乎无法成功查询。我有一个用户名和密码,以及我所使用的城市提供的用于停车的URL和前缀区域ID。当我尝试运行JavaScript并记录访问令牌时,响应为“Unauthorized”。我是否需要向城市提出访问令牌的请求?

代码是用javascript编写的,并且使用了node.js和node-fetch。

这是我的代码:

const fetch = require("node-fetch")
function request(url, headers, body) {
    let options = { headers: headers, body:body}
    return fetch(url, options).then(result => {
        if (result.status>=400) return(result.statusText)
        else return result.text().then(txt => {
            try { return JSON.parse(txt) }
            catch (err) { return txt }
        })
    })
}
// my credentials
const developer, uaa, metadataservice, eventservice, predixZone

developer = '{user}:{pass}'
uaa='{uaaURL}'    
eventservice='{eventURL}'    
metadataservice='{metadataURL}'    
predixZone='{predixzoneParking}' 

async function example(event){
    let devToken = (await request(uaa+'?grant_type=client_credentials', {authorization: 'Basic '+developer}))
    console.log(devToken)
    let output = (await request(metadataservice+'/assets/search?q=eventTypes:PKIN',{authorization: 'Bearer '+devToken,'predix-zone-id':predixZone})).content
    console.log(output)
}
example()

我在做错什么或可能错过了什么?

1 个答案:

答案 0 :(得分:1)

您似乎没有对base64编码的用户名和密码。
在代码顶部:

const btoa = str => new Buffer(str).toString('base64')

声明用户名并通过时:

developer = btoa('{user}:{pass}')