5

UGC に対して Web リクエストを実行し、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 を解析してさまざまな文字列を抽出し、これらを認証に渡そうとしましたが、ログにエラーが表示されます - 「エラー OAuth2AccessToken - ダイジェストが間違っています。」トークンの正確にどの部分をどの形式で認証に渡す必要がありますか?

どうもありがとう

ジョン

4

1 に答える 1

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);

  3. 次のリクエストには、Authorization ヘッダーを含める必要があります。Java 側ではbuilder.header("authorization", "OAuth " + decodedTokenString);、.NET 側では使用できますが、Client.Headers["authorization"] = "OAuth " + DecodedTokenString;

特筆すべきは、TokenAccessPoint の cd_webservice_conf.xml ( ) で定義された SharedSecretは、(WebService)EndPoint の/Configuration/AuthenticationServer/SharedSecret/cd_ambient_conf.xml ( ) で定義された SharedSecret と同じである必要があることです。/Configuration/Security/SharedSecret/

サーバーから取得したトークンを正しくデコードしましたか? 2 つの構成ファイルで適切な SharedSecret を構成したことは確かですか?

お役に立てれば。

于 2013-02-27T14:58:46.240 に答える