【要約】Twitter API v2のOAuth 1.0a署名で詰まった話 — HMAC-SHA1署名を標準ライブラリだけで実装する [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がAWS Lambda上でTwitter自動投稿エージェントを実装する際、外部ライブラリの管理が課題となった。
- ・
tweepy等の利用には、manylinux2014_x86_64環境でのビルドとzipへの組み込みが必要。 - ・OAuth 1.0aの署名プロセスは、パラメータのソートやURLエンコードなど手順が複雑。
- ・署名ロジックに誤りがあると、401 Unauthorizedエラーのみが返り、原因特定が困難。
// Approach
デプロイの簡素化を目指し、Pythonの標準ライブラリのみでOAuth 1.0aの署名ロジックを自前で実装した。
- ・
hmac,hashlib,base64,urllib.parseを活用。 - ・OAuthパラメータの準備、BaseStringの生成、署名キー(
consumer_secret&token_secret)の作成、HMAC-SHA1によるハッシュ化、Base64エンコードの順で処理。 - ・
urllib.requestを用いてHTTPリクエストを実行。
// Result
外部ライブラリへの依存を排除したことで、Lambdaのデプロイフローが劇的に改善された。
- ・
pip installやmanylinux対応のビルド作業が不要になった。 - ・ソースコードをzip圧縮するだけでデプロイが完了するシンプルな構成を実現。
- ・仕様に基づいた正確な署名生成により、Twitter API v2との連携に成功した。
Senior Engineer Insight
> サーバーレス環境では、依存関係の削減が運用コストとデプロイ速度に直結する。OAuthのような仕様が確立されたプロトコルは、標準ライブラリでの実装が極めて合理的だ。ただし、署名ミスは401エラーとしてしか現れず、デバッグが困難である。実装時は仕様書との厳密な照合が不可欠だ。