概要
serverlessを使って、サーバレスにTwitter認証するサンプルを作りました。
https://github.com/abeyuya/serverless-auth
serverlessで似たようなものを作る際の参考になれば嬉しいです。
やれること
Twitter認証をして、access_tokenとaccess_token_secretをlambdaで受け取ることができます。
そのtokenをDynamoDBとかに保存しておいて、後で何かAPI叩くのに使ったりする用途等を想定しています。
サンプルでは受け取ったtokenをそのままページに返しています。
やりたかったこと
こういうやつ: http://dmd.netmarble.jp/
静的なWebサイトなんだけど、「Twitter認証することで何かしらのコンバージョンとする」みたいなことがやりたい場合に、その要件のためだけにサーバサイドを構築するのは嫌だなぁ、というモチベーションです。
実装の解説
- webサイトからこのシステム(/twitter/auth)にリンクで飛んでくる
- request_tokenとかを取得してTwitter認証画面にリダイレクト
- Twitter上で認証してもらう
- callbackでこのシステムに戻ってくる(/twitter/callback)
- access_tokenを取得する
- もとのWebサイトにリダイレクトで返す
このシステムはリクエスト受けたら何かしら処理をして、リダイレクトでどこかに飛ばすという流れなので、ユーザに見える画面は無いです。
Good
上記のような用途ならlambdaとかserverlessはぴったりハマるなと思いました。
- twitter認証された(lambdaが稼働した)分だけしか追加でお金かからない
- 件数によるけど、よっぽど無料枠に収まるのでは
- たぶん落ちない
- 負荷とかスケールの問題はAWSに丸投げ
- ログインユーザ管理とか死活監視とかも考えなくて良い
- マイクロサービスっぽい?ので、別の案件でもそのまま使い回しやすい
Bad
- serverlessの学習コスト
- 楽しい
- serverlessのメンテナンスコスト
- バージョンアップが激しい
- 一度作ってその後手を入れないなら、あんま気にしなくて良いような気がする
その他
たぶん似たようなやつ: https://github.com/laardee/serverless-authentication-boilerplate
これはReadmeとかソース読んでみて、Twitter認証に使えるかわからなかったので、結局自分でサンプルを作ってみたといういきさつです。