3

DotNetOpenAuth は初めてで、ProcessUserAuthorization でベリファイアとして使用する値が見つかりません。

私が達成したいのは、OAuth を使用するアプリケーション (UserVoice と呼ばれる) にユーザー資格情報でログインすることです。私のコードは次のようになります。

string requestToken;
var authorizeUri = consumer.RequestUserAuthorization(new Dictionary<string, string>(), null, out requestToken).AbsoluteUri;
var verifier = "???";
var accessToken = consumer.ProcessUserAuthorization(requestToken, verifier).AccessToken;
consumer.PrepareAuthorizedRequest(endpoint, accessToken, data).GetResponse();

ユーザー名、パスワード、コンシューマ キー、コンシューマ シークレットを使用しようとしましたが、何も機能していないようです。ベリファイアとして使用すべき値を誰かが知っていますか?

ありがとう

4

3 に答える 3

2

DotNetOpenAuthを使用してUserVoiceにログインする方法をついに見つけました。UserVoiceのOAuthの実装は標準ではなかったと思いますが、この間にそれを行うことができました。

var consumer = new DesktopConsumer(this.GetInitialServiceDescription(), this._manager)
string requestToken;
consumer.RequestUserAuthorization(null, null, out requestToken);

// get authentication token
var extraParameters = new Dictionary<string, string>
{
    { "email", this._email },
    { "password", this._password },
    { "request_token", requestToken },
};

consumer = new DesktopConsumer(this.GetSecondaryServiceDescription(), this._manager);
consumer.RequestUserAuthorization(extraParameters, null, out requestToken);

GetInitialServiceDescriptionは適切なリクエストの説明を返し、GetSecondaryServiceDescriptionはハッキングされたバージョンであり、リクエストトークンエンドポイントの代わりに承認エンドポイントを返します。この方法で返された「request_token」(OAuthの理解からすると実際には通常のrequest_tokenではありません)は、PrepareAuthorizedRequestのアクセストークンとして使用できます。

于 2012-06-15T14:57:22.010 に答える
0

ベリファイアは、ユーザーがアプリを承認したいと言った後に UserVoice が画面に表示するコードです。ProcessUserAuthorizationユーザーは、この検証コードを Web サイトからアプリケーションの GUI にコピー アンド ペーストして、メソッド に渡すことができるようにする必要があります。

これは OAuth 1.0a (1.0 ではない) でのみ必要であり、1.0 で発見された特定の悪用可能な攻撃を緩和するためにあります。サービスが 1.0a バージョンであることをServiceProviderDescription必ず指定して (実際に Uservoice がそれをサポートしている場合)、DNOA が Uservoice に検証コードを作成する必要があることを伝えます。

ちなみに、プロセス タイトルをスキャンしたり、独自のアプリ内でブラウザーをホストしたりするなどのさまざまなトリックを使用すると、検証コード ステップを手動でコピーするユーザーをアプリに自動的にコピーさせることで、そのユーザーを排除できます。

于 2012-06-14T13:42:29.043 に答える