oAuth uStream API

oAuth uStream API

我正在尝试使用他们的 API 和 oAuth 从 uStream 获取数据。我可以获得授权令牌,并且该令牌在 Rest API 客户端中确实有效,我可以获得数据。但是我无法在我的项目中获取数据...我一直收到 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...但我可以在 API 客户端(如 Insomnia)中使用令牌,它会起作用...我可以获得数据。

对我做错了什么有什么想法吗?

谢谢!

假设 token 没有以单个 space 为前缀,那么这一行:

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

应该改为(在 Bearer 之后添加一个 space):

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

此外,GET请求数据不需要在请求中添加Content-Typeheader;尽管包含不太可能导致错误。

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

此外,您不需要两次提供客户端密码。这足以通过请求 body.

中的授权 header 或 client_secret 属性 来提供它

所以,这足以提供秘密:

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

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

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

实际上有两件事我错了。 @João Angelo 指出的第一个是字符串之间缺少 space:Bearer & token.

第二个也是最令人沮丧的是授权需要授权...大写 A。现在可以使用...。感谢您的帮助。