oAuth uStream API

时间:2016-12-06 23:28:29

标签: c# api oauth-2.0 restsharp

我尝试使用他们的API和oAuth从uStream获取数据。我可以获取身份验证令牌,该令牌在Rest API Client中可以正常工作,我可以获取数据。然而,我无法在我的项目中获取数据......我一直得到401 unauth ..

代码:

 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 ...但是我可以在像Insomnia这样的API客户端中使用令牌,它可以工作......我可以获取数据。

关于我做错的任何想法?

谢谢!

3 个答案:

答案 0 :(得分:1)

假设token没有前缀单个空格,那么这一行:

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

应该是(在Bearer之后添加空格):

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

此外,GET数据请求不需要将Content-Type标头添加到请求中;虽然包含不太可能导致错误。

答案 1 :(得分:0)

正如João所提到的,主要问题是字符串“Bearer”和令牌本身之间缺少空格字符。解决这个问题后我很确定它会起作用。 是的,Content-Type对于GET请求来说是多余的,但它不会损害您的请求的成功。

此外,您不需要两次提供客户端密钥。这足以通过请求体中的Authorization标头或client_secret属性提供它。

所以,这足以以这种方式提供秘密:

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

Ant在这种情况下你不应该在请求体中再次提供秘密,这里是修改后的调用,基于原始代码:

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

答案 2 :(得分:0)

实际上有两件事我错了。 @JoãoAngelo指出的第一个是字符串之间缺失的空间:Bearer&amp;令牌。

第二个也是最令人沮丧的是授权需要授权......与资本A.现在它有效......谢谢你的帮助。