当サイトはInternet Explorerに対応しておりません。より性能のよい、下記のようなブラウザを使ってみませんか?

IE in the grave
記事一覧に戻る

LambdaでGithubのアクセストークンを取得する

アクセストークンの取得

OAuth を Web アプリに実装する際、まずアクセストークンを取得する必要があります。

Google や Facebook の場合、SDK を使ってフロントエンド側だけで取得できます。 下記のような便利なコンポーネントもあり、頻繁に更新されています。

ところが、Github の場合はフロントエンド側だけではトークンを取得できません。 サーバが存在することを前提に認証を行う枠組みになっているためです。

Github の OAuth 認証の動き

Github の場合は、認証画面からリダイレクトで戻ってきたとき、トークンではなくcodeというものを渡されます。 基本的には、このcodeを下記の API に POST してやれば、トークンが取得できます。

POST https://github.com/login/oauth/access_token

ところが、このエンドポイントには CORS が設定されていないため、フロントエンドから取得するとエラーがでます。

サーバ側でcodeをトークンと交換する処理をしなさい、ということなのでしょう。 しかし、Web アプリをサーバレスで運用している場合は、トークンが取得できないということになります。 バッドノウハウで無理矢理取得できないこともないのですが、美しくありません。

Lambda でアクセストークンを取得

この問題を解決するため、今回は Lambda Function を作成して対応しました。

Github から受けとったcodeを param に付与して GET を叩けば、トークンが返ってくるという単純なものです。

Lambdaを使ったGithubのOAuthの流れ

叩く

GET https://your.api.gateway/getToken?code=CODE_FROM_GITHUB

トークン帰ってくる

{ "accessToken": "a1b2c3........" }

なお、CODE を取得するまでの処理は、下記のコンポーネントを使うと便利です。

参考

profile

田村 翔太

Yuuniworks代表。島根県浜田市を拠点に活動するフルスタックエンジニアです。Python/Node.js/GoによるAPIの開発、React/Vue.js等によるSPAの開発などを行っています。

記事一覧に戻る