我在尝试向UGC进行webrequest并使用oAuth进行身份验证时遇到了问题。我正在进行网络请求,例如: -
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%2fvyhQneZHrm1aGhwOlgLtA9xGWd77hkxWbjmindtM%3D”, “expires_in”:300}
我已经解析了JSON以提取各种字符串并尝试将这些字符串传递给授权,但无论我尝试什么,我都会在日志中收到错误 - “ERROR OAuth2AccessToken - Digest is wrong。”究竟应该将令牌的哪一部分以及以何种格式传递给授权?
非常感谢
约翰
答案 0 :(得分:5)
就像你提到的那样,协议是这样的:
您向访问令牌端点发出请求以获取令牌(您需要在此提供您的client_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)的cd_ambient_conf.xml(/Configuration/Security/SharedSecret/
)中定义的SharedSecret相同)端点。
您确定已正确解码从服务器获取的令牌吗?您确定在两个配置文件中配置了正确的SharedSecret吗?
希望这有帮助。