Joh*_*ohn 5 oauth odata tridion tridion-content-delivery tridion-2011
尝试向UGC进行webrequest并使用oAuth进行身份验证时,我遇到了问题.我正在进行网络请求,例如: -
WebRequest wr = WebRequest.Create("http://ugc.service/odata.svc/Ratings(Id=200)");
wr.Headers["authorization"] = "OAuth " + auth;
Run Code Online (Sandbox Code Playgroud)
其中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." 我应该将授权的哪一部分以及以何种格式传递给授权?
非常感谢
约翰
就像你提到的,协议是这样的:
您向访问令牌端点发出请求以获取令牌(您需要在此提供您的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;
值得一提的是,在SharedSecret(该cd_webservice_conf.xml定义/Configuration/AuthenticationServer/SharedSecret/的TokenAccessPoint的)需要是相同的如在cd_ambient_conf.xml(限定的SharedSecret /Configuration/Security/SharedSecret/的(web服务)的端点).
你确定你正确解码了从服务器获得的令牌吗?您确定在两个配置文件中配置了正确的SharedSecret吗?
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |