2013-08-16 6 views
1

저는 Zendesk API, HTTPS 전용 JSON API로 작업 중이며 리소스를 업데이트하는 데 인증이 필요하며 API는 다른 사용자로 인증 할 때 사용할 API 토큰을 제공합니다. 리소스를 업데이트 할 때 SSL을 통해 PUT 요청을 발행하고 요청 본문에 적절한 JSON 콘텐츠를 할당하고 Content-Type 요청 헤더를 application/json으로 지정합니다.토큰을 사용하여 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}임을 지정 : 다음은 인증 헤더와 API에 권한을 부여하는 나의 시도이다. 해당 형식을 Base64::encode64으로 인코딩하고 Basic 앞에 오는 인증 헤더에 전달했지만 응답은 401 Unauthorized입니다. 그러나 그 두 줄을 req.basic_auth {user_email}, {user_password}으로 바꾸면 문제가 없습니다.

내 질문에 사용자의 이메일과 비밀번호를 req.basic_auth에 제공하는 대신 이메일과 주어진 API 토큰을 인증으로 사용하여 다른 사용자로 인증하려면 어떻게해야합니까?

내가 주제에 대해 수행 한 인터넷 검색 결과는 거의 알려지지 않았습니다. 일반적으로 API 토큰보다 Authorization 헤더를 처리 할 때는 일반 {username}:{password} 형식을 사용하는 것이 더 일반적입니다.

미리 감사드립니다.

업데이트 : 이상하게, request.headers['Authorize'] = "BasiC#{credentials}"이처럼 권한을 부여하는 동안 401 무단 오류 또는 WWW 인증 헤더를 반환하지 않습니다 req['Authorization'] = "BasiC#{credentials}"와 최종 사용자로 인증하려고합니다.

답변

3

마침내 내 머리를 두드리는 소리를 내고 창문 밖으로 노트북을 던지면서 알아 냈습니다. 갑자기 대답은 믿을 수 없을만큼 명백해 보입니다.

Net :: HTTP를 사용하는 경우 Basic_auth 메소드는 API에 따라 토큰을 허용 할 수 있으며 Zendesk API는 API 토큰을 사용하는 형식이 {email}/token : {token}임을 지정합니다. 기본 인증은 {username} : {비밀번호} 형식을 사용합니다. 두 개의 필드는 콜론으로 구분됩니다. 즉, Zendesk의 경우 {email}/토큰을 첫 번째 인수로, {token}을 두 번째 인수로 사용할 수 있음을 의미합니다 대신 첫 번째 인수로 이름과 두 번째 인수로 암호)의, 그래서 다음 코드는 올바른 :

req.basic_auth "{email}/token", "{api_token}" 

내가 덧글을 남길 수있는이 유용한 발견 누군가를 바랍니다. 나는이 좌절에서 누군가를 살려 줬다.

관련 문제