我正在使用 Zendesk API,仅 HTTPS、JSON API 和身份验证需要更新资源,并且 API 提供 API 令牌以在以不同用户身份进行身份验证时使用。更新资源时,我通过 SSL 发出 PUT 请求,将适当的 JSON 内容分配给请求正文,并将Content-Type
请求标头指定为application/json
.
接下来,API 指示其用户通过使用用户的电子邮件和密码(由于多种原因我不能这样做)或使用用户的电子邮件地址和 API 令牌来作为最终用户进行身份验证。以下是我尝试使用 Authorization 标头向 API 授权:
@id = params[:id]
@comment_body = params[:comment]
uri = URI.parse "https://{subdomain}.zendesk.com/api/v2/requests/#{@id}.json"
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Put.new(uri.request_uri)
req.body = '{"request": {"comment":{"value":' + "\"#{@comment_body}\"" + '}}}'
req['Content-Type'] = 'application/json'
#The following two lines do not work!
credentials = Base64::encode64("{user_email}/token:{api_token}")
request.headers['Authorization'] = "Basic #{credentials}"
response = http.request(req)
API 指定使用 API 令牌进行身份验证的格式为{user_email}/token:{api_token}
. 我用 编码该格式Base64::encode64
并将其传递给以 开头的授权标头Basic
,但响应是 401 Unauthorized。但是,将这两行替换为req.basic_auth {user_email}, {user_password}
工作正常。
所以我的问题是,我如何使用电子邮件和给定的 API 令牌作为身份验证作为不同的用户进行身份验证,而不是提供用户的电子邮件和密码req.basic_auth
?
我在该主题上所做的谷歌搜索几乎没有透露任何信息。{username}:{password}
显然,在处理 Authorization 标头时使用普通格式比使用 API 令牌更常见。
提前致谢!!
更新:奇怪的是,尝试以最终用户身份进行身份验证req['Authorization'] = "Basic #{credentials}"
不会返回 401 Unauthorized Error 或 WWW-Authenticate 标头,同时尝试进行授权request.headers['Authorize'] = "Basic #{credentials}"
。