我正在使用仅支持HTTPS的JSON API的Zendesk API,并且需要身份验证来更新资源,并且API在提供用于以不同用户身份进行身份验证时使用的API令牌。更新资源时,我通过SSL发出PUT请求,将相应的JSON内容分配给请求主体,并将Content-Type
请求标头指定为application/json
。使用令牌对API进行身份验证
接下来,API指示其用户通过使用用户的电子邮件和密码(由于多种原因我不能这样做)或使用用户的电子邮件地址以及API令牌来作为最终用户进行身份验证。以下是我尝试授权与授权头的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未授权。但是,用req.basic_auth {user_email}, {user_password}
代替这两条线可以正常工作。
所以我的问题是,我如何使用电子邮件和给定的API令牌进行身份验证,而不是将用户的电子邮件和密码提供给req.basic_auth
?
我在这个话题上做的谷歌搜索显示很少;显然,在处理Authorization头部时,使用正常的{username}:{password}
格式比API令牌更常见。
在此先感谢!
更新:古怪,试图在尝试授权的request.headers['Authorize'] = "BasiC#{credentials}"
确实与req['Authorization'] = "BasiC#{credentials}"
最终用户不返回401错误未经授权或WWW身份验证头进行身份验证。