尝试对UGC进行网络请求并使用oAuth进行身份验证时出现问题。我正在进行如下Web请求:

WebRequest wr = WebRequest.Create("http://ugc.service/odata.svc/Ratings(Id=200)");
wr.Headers["authorization"] = "OAuth " + auth;


其中auth是从access_token.svc返回的我的令牌。根据文档,从服务返回的令牌应该类似于:

HufXeuUt%2FYYElA8SYjJOkUkrXxV9dyXRirmKhjW%2Fb%2FU%3D

但是,从access_token.svc返回的内容更像是:

{“ access_token”:“ client_id%3dtestuser%26expiresOn%3d1361898714646%26digest%3d%2fW%2fvyhQneZHrmZHarm1aGhwOlgLtA9xGWd77hkxWbjmindtM%3d”,“ expires_in”:300}

我已经解析了JSON以提取各种字符串,并试图将它们传递给授权,但是无论我怎么尝试,我都会在日志中看到错误-“ ERROR OAuth2AccessToken-摘要错误。”我应该将令牌的哪一部分以及以哪种格式传递给授权?

非常感谢

约翰

最佳答案

就像您提到的,协议是这样的:


您向访问令牌端点发出发布请求以获取令牌(您需要在此处提供header_id和client_secret作为标头或查询参数);
您得到的答案与此类似:{"access_token":"sometoken","expires_in":300};
2.1值得一提的是,令牌是经过url编码且采用UTF-8格式的,因此,在Java方面,您需要执行URLDecoder.decode("sometoken", "UTF-8");;而在.NET方面,您需要进行HttpUtility.UrlDecode("sometoken", System.Text.Encoding.UTF8);
您的下一个请求需要包含授权标头。在Java方面,您可以执行builder.header("authorization", "OAuth " + decodedTokenString);;而在.NET方面,您可以使用Client.Headers["authorization"] = "OAuth " + DecodedTokenString;


值得一提的是,在TokenAccessPoint的cd_webservice_conf.xml(/Configuration/AuthenticationServer/SharedSecret/)中定义的SharedSecret必须与(WebService)EndPoint的cd_ambient_conf.xml(/Configuration/Security/SharedSecret/)中定义的SharedSecret相同。

您确定正确解码了从服务器获得的令牌吗?您确定在两个配置文件中配置了正确的SharedSecret吗?

希望这可以帮助。

07-26 09:30