4

@J7mboによるすばらしいTwitter API PHP Wrapper スクリプトを使用して、 Twoolsという Twitter アプリを PHP で作成しました。多くの Twitter アプリの例と同様に、dev.twitter.comでアプリを作成し、OAUTH キー (コンシューマー キー、コンシューマー シークレット、アクセス トークン、アクセス トークン シークレット) を取得してアプリに追加する必要があります。

動作には満足していますが、この動作方法と、ユーザーがサインインしてアプリを使用できるようにするアプリとの違いについて混乱しています。

私の Twitter アプリは OAUTH トークンを保存し、ユーザーからの指示なしにいつでも実行できます。たとえば、1 時間ごとなどのスケジュールで実行できます。問題は、ユーザーが dev.twitter.com でアカウントを作成し、それらのトークンを取得する必要があることです。

他のアプリでは、ユーザーが自分の詳細を使用することを承認できるようです。この場合、ユーザーは独自のアプリを作成する必要はありません。OAUTH の詳細はおそらくアプリによって保存されます。この技術は何と呼ばれていますか?これら 2 つの手法の違いがわかりません。この後者の場合、アプリが承認されると、ユーザーからの指示なしに自律的に動作できますか? たとえば、スケジュールに従って実行できますか?

私の混乱を覆してくれることを願っています!

ありがとう。

4

3 に答える 3

2

3 つの認証方法について質問されました。ここに私の現在の理解があります:

アプリケーションのみ: まさにそのとおりです。アプリケーションには、(認証タイプに関係なく使用されるコンシューマー トークンに加えて) 1 セットのアクセス トークンが割り当てられます。リクエストは、ユーザーからではなく、アプリからのものと見なされます。

アプリケーションのみの認証を使用してリクエストを発行する場合、「現在のユーザー」という概念はありません。したがって、POST ステータス/更新などのエンドポイントは、アプリケーションのみの認証では機能しません。

シングルユーザーこれは、アプリ全体で合計 1 人のユーザーしかいない場合です。これはかなりニッチなケースで、シングル ユーザーの管理アプリのようなものかもしれません。例を見ると、トークンはすべてハードコードされています。あなたが現在行っていることは、基本的にユーザーに値を尋ねてそれらを渡すことを除いて、似ています。あなたが指摘したように、それは理想的ではありません。実際、そのページの最初の部分には、通常はアプリケーションのみがより適切であると書かれています。

Twitter でサインインプロセスにはいくつかのステップがありますが、ユーザーの観点から見ると、ユーザーは Twitter にリダイレクトされ、代わりにアプリケーションの権限を付与することに同意します。その後、リターン トークンを保存し、リクエストを発行できます。

私はSIWTがあなたが探しているものだと確信しています。スケジュールどおりに実行できますか? 理由がわかりません...返されたトークンがしばらくして期限切れにならない限り。また、ベストプラクティスとは見なされないかもしれませんが、そうしないように言っているものは何も見つかりません.

私は現在、これを自分で実装する作業を行っています(迅速で汚いログイン方法として使用するため)。プロセスの最初の段階のコードは次のとおりです。コードは非常に醜いですが、機能します。最初の oauth トークンを取得する必要があります。間違ったサーバー時間に対処している間、私は数日間壁に頭をぶつけました (これは本当にあなたを混乱させる可能性があります)、@J7mbo ラッパーに関する混乱を共有しました.

$oauthStuffs = array(
'oauth_consumer_key' => "**YOUR_CONSUMER_KEY**",
'oauth_nonce' => base64_encode(openssl_random_pseudo_bytes(32)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_version' => '1.0',
'oauth_callback' => '**YOUR_CALLBACK_URL**'
);

ksort($oauthStuffs);

$method = 'POST';

$baseUrl = 'https://api.twitter.com/oauth/request_token';

$outputString = '';

$i = 0;
foreach($oauthStuffs as $key => $value){
    $outputString.= rawurlencode($key).'='.rawurlencode($value);
    $i++;

    if($i < count($oauthStuffs)) $outputString .='&';
}


$baseString = $method.'&'.rawurlencode($baseUrl).'&'.rawurlencode($outputString);

$consumerSecret = "**YOUR_CONSUMER_SECRET**";

$signingKey = rawurlencode($consumerSecret).'&';

$signature = base64_encode(hash_hmac('sha1', $baseString , $signingKey, true));

$oauthStuffs['oauth_signature']=$signature;

ksort($oauthStuffs);

$headerString = "Authorization: OAuth ";
$i = 0;
foreach($oauthStuffs as $key => $value){
    $headerString .= rawurlencode($key).'="'.rawurlencode($value).'"';
    $i++;
    if($i < count($oauthStuffs)) $headerString .= ", ";
}


$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $baseUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($headerString));

$postFields = array(
    'oauth_callback' => rawurlencode('**YOUR_CALLBACK_URL**')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);


$response = curl_exec($ch);
echo $response;

これを終了しても、そのままで SIWT をサポートする別のライブラリが見つからない場合は、それを github に投げるかもしれません。

それでもうまくいかない場合は、次の認証方法の比較もご覧ください: https://dev.twitter.com/docs/auth/obtaining-access-tokens

[更新: 私はすべてを自分で実装して動作させましたが、代わりにabraham/twitteroauthなどの他のライブラリを検討することをお勧めします]

于 2013-11-05T15:37:44.547 に答える
1

これは、私が数日間頭を壁にぶつけた質問です。しかし、ついに私はそれを手に入れました。

  1. ツイッター消費者トークン
  2. ツイッター消費者の秘密
  3. ユーザートークン
  4. ユーザーシークレットトークン

これらは、ユーザーに代わってツイートを投稿するために必要なものであり、TWITTER CONSUMER TOKENユーザーにTWITTER CONSUMER SECRET代わって投稿する許可を必要とする Twitter アプリの管理者が作成する必要があります。とはUSER TOKENUSER SECRET TOKENユーザーが代わりにツイートを投稿するために必要なものです。getRequestToken()これは、OAUTH の関数を使用して取得できます。この機能の使用方法については、Abraham が書いたredirect.phpこちら を参照してください。そして、取得後、APIから受け取ったユーザーのユーザートークンとユーザーシークレットトークンでTWITTER CONSUMER TOKENとTWITTER CONSUMER SECRETを使用して、ユーザーに代わって投稿できます。それでおしまい!twitteroauthUSER TOKENUSER SECRET TOKEN

ただし、ユーザーはアクセスすることでいつでもアクセスを取り消すことができます。

https://twitter.com/settings/applicationsにアクセスし、アプリの横にある [アクセスを取り消す] ボタンをクリックします。

于 2014-01-07T15:31:08.933 に答える
0

これをチェックしてください、多分それはあなたが望むものです

https://dev.twitter.com/docs/ios/using-reverse-auth

https://dev.twitter.com/docs/faq#6536

すみません、私の下手な英語で

于 2013-10-31T15:54:51.063 に答える