5

我在尝试向 UGC 发出网络请求并使用 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”。我应该通过令牌的哪一部分以及以什么格式进行授权?

非常感谢

约翰

4

1 回答 1

5

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

  1. 您向访问令牌端点发出 post 请求以获取令牌(您需要在此处提供您的 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);

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

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

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

希望这可以帮助。

于 2013-02-27T14:58:46.240 回答