我正在使用僅支持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身份驗證頭進行身份驗證。