SignInWithAppleによる認証実装のサンプル
CSFRなど、各種攻撃の対策はされておらず、SignInWithAppleを手軽に試す目的で作られている。
Postgress + Node.js(express)
SignInWithAppleをWEBで利用するためには、以下の3つが必要である。 これらは、AppleDeveloperポータルで作成できる。
- App ID
- Services ID
- Keys
以下は私が認識している情報で誤りがある可能性があることに注意。
1つのAppIDに対して、ServiceIDが複数(?)紐つく。 SignInWithApple用にServiceIDを発行する必要があるが、それは何らかのAppIDと紐つけなければならない。 SignInWithAppleを利用した時にクライアントに表示されるサービス名はServiceIDとなる。 また、SignInWithApple用のKeyを発行する際も特定のAppIDを紐つけなければならない。
ServiceIDについては、SignInWithAppleで利用するcallback先のURLを指定してあげる必要がある(Website URLsと表記されている)。また、HTTPSが必須であり、localhostをcallback先としては指定できない。 つまり、開発段階でもHTTPS環境+ドメインが必要である。 本サンプルはHTTPSで動作する。ドメインに関しては各自の独自ドメインを開発コンピュータのローカルアドレスと紐つけて、それをcallback先のURLを指定してあげれば良いだろう。
./keys
ディレクトリに以下の名前で各種キーを保存すること。
appleAuthPrivatekey.p8
SignInWithAppleで利用するClientSecret。cert.pem
HTTPS通信に用いるprivatekey.pem
HTTPS通信に用いる
AppleDeveloperポータルより鍵を発行。 AppleDeveloperPortalについての章で記述しているkeyにあたる。
下記コマンドを実行することでHTTPS通信に必要なキーを発行できるので、それを格納する。
$openssl req -x509 -newkey rsa:2048 -keyout privatekey.pem -out cert.pem -nodes -days 365
.env_sample
を.env
にリネームして必要な情報を埋めること。AppleDeveloperポータルより取得すること。
- CLIENT_ID 作成したserviceIDのIdentifier
- TEAM_ID あなたの開発者アカウント情報。こちらから閲覧
- KEY_ID 作成したkeyのId。View Key Detailsから見ることができる。
- REDIRECT_URI serviceIDを作成する時に指定したcallbackURLを指定する。
Dockerを用いている。
docker-compose up -d
で実行すること。
postgressコンテナはDBを作成するためには
psql -U postgres
CREATE DATABASE signinwithapple;
を実行すること。
nodeコンテナ内で実行すること。
$ yarn dev
$ yarn build
$ yarn start
$ yarn format