Tridion UGC服务和oAuth身份验证

时间:2013-02-26 18:04:34

标签: oauth tridion odata tridion-2011 tridion-content-delivery

我在尝试向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。”究竟应该将令牌的哪一部分以及以何种格式传递给授权?

非常感谢

约翰

1 个答案:

答案 0 :(得分:5)

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

  1. 您向访问令牌端点发出请求以获取令牌(您需要在此提供您的client_id和client_secret作为标头或查询参数);

  2. 您会得到与此类似的答案:{"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);;

    < / LI>
  3. 您的下一个请求需要包含授权标头。在Java端,您执行builder.header("authorization", "OAuth " + decodedTokenString);,而在.NET端,您可以使用Client.Headers["authorization"] = "OAuth " + DecodedTokenString;

  4. 值得一提的是,TokenAccessPoint的cd_webservice_conf.xml(/Configuration/AuthenticationServer/SharedSecret/)中定义的SharedSecret需要与(WebService)的cd_ambient_conf.xml(/Configuration/Security/SharedSecret/)中定义的SharedSecret相同)端点。

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

    希望这有帮助。