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などの他のライブラリを検討することをお勧めします]