2016-12-06 1 views
0

API 및 oAuth를 사용하여 uStream에서 데이터를 가져 오려고합니다. 인증 토큰을 얻을 수 있으며 토큰이 나머지 API 클라이언트에서 작동하고 데이터를 가져올 수 있습니다. 그러나 나는 ... 나는 401 UNAUTH을 .. 점점 계속 내 프로젝트에서 데이터를 얻을 수oAuth uStream API

코드 : 나는 불면증과 같은 API 클라이언트에서 토큰을 사용할 수 있습니다

protected void Page_Load(object sender, EventArgs e) 
    { 
     var client = new RestClient("https://www.ustream.tv/oauth2/token"); 
     var request = new RestRequest(Method.POST); 
     request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx"); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
     request.AddParameter("application/x-www-form-urlencoded", "client_secret=xxxxxxxxxxxxx&client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody); 
     IRestResponse response = client.Execute(request); 

     IRestResponse<TokenObject> response2 = (IRestResponse<TokenObject>)client.Execute<TokenObject>(request); 

     var tknName = response2.Data.access_token; 

     GetData(tknName); 
    } 

     public void GetData(string token) 
    { 
     var client = new RestClient("https://api.ustream.tv/channels/206844441.json"); 
     var request = new RestRequest(Method.GET); 
     request.AddHeader("authorization", "Bearer" + token); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 

     IRestResponse jsonResponse = client.Execute(request); 

     IRestResponse<Channel> json2Response2 = (IRestResponse<Channel>)client.Execute<Channel>(request); 

     var blah = json2Response2.Content; 
    } 

jsonResponse 다시 401 온다 ...하지만 그리고 그것은 작동합니다 ... 나는 데이터를 얻을 수 있습니다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

감사합니다. 추가적으로,

request.AddHeader("authorization", "Bearer " + token); 

을 (베어러 후에 공간에 추가)

request.AddHeader("authorization", "Bearer" + token); 

대신 같아야

답변

1

가정 token은 단일 공간 다음 행을 접두사되지 데이터에 대한 GET 요청에는 Content-Type 헤더가 req에 추가 될 필요가 없습니다. uest; 포함은 오류를 일으키지 않습니다.

0

João가 언급했듯이 주된 문제는 문자열 "Bearer"와 토큰 자체 사이의 공백 문자가 누락되는 것입니다. 이 문제를 해결 한 후에는 효과가있을 것이라고 확신합니다. 예, Content-Type은 GET 요청에 불필요하지만 요청 성공 여부에 영향을주지 않습니다.

또한 클라이언트 비밀 번호를 두 번 제공 할 필요가 없습니다. 요청 본문의 Authorization 헤더 또는 client_secret 속성을 통해이를 제공하기에 충분합니다.

그래서, 그 비밀 그런 식으로 제공하기 위해 충분하다 :

request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx"); 

개미는 요청 본문에 다시 비밀을 제공하지 않아야이 경우를, 여기에 원래 코드를 기반으로 수정 된 호출은 다음과 같습니다

request.AddParameter("application/x-www-form-urlencoded", "client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody); 
+0

답변을 더 명확하게 만들 수있는 코드를 추가 할 수 있습니까? –

+0

완료, 예제 추가 –

0

내가 실제로 잘못한 두 가지 사항이있었습니다. @ João Angelo가 지적한 첫 번째 이유는 문자열 사이에 누락 된 공간 인 Bearer & 토큰입니다.

두 번째로 가장 실망 스럽다는 것은 권한 부여가 대문자 A와 함께해야한다는 것입니다. 이제 작동합니다 ... 도움을 요청합니다.