Appleでログイン
プロジェクトでApple認証を有効にするには、Apple OAuthアプリケーションを設定し、Supabaseダッシュボードでそのアプリケーションの認証情報を追加する必要があります。
概要
Apple OAuthは大きく分けて6つのステップで構成されています。
- 「Sign In with Apple」機能を持つ
App Id
を取得する。 Service Id
の取得 - これはclient_id
として使用されます。client_secret
の取得に使用するsecret key
を入手します。secret key
を使ってclient_secret
を生成します。client id
とclient secret
キーをSupabase プロジェクトに追加します。- Supabase JS Client Appにログインコードを追加します。
手順
Apple Developerアカウントへアクセス
- developer.apple.comにアクセスします。
- 右上の
Account
をクリックしてログインします。
App IDの取得
Certificates, Identifiers & Profiles
にアクセスします。- 左側の
Identifiers
をクリックします。 - 左上の
Identifiers
の隣にある+
マークをクリックします。 App IDs
を選択し、Continue
をクリックします。App
タイプを選択し、Continue
をクリックします。- アプリの情報を記入します。
- アプリの説明を入力します。
- Bundle ID(Appleはドメイン名の逆引きを推奨しています。ドメインがacme.com、アプリ名がrunnerとします。その場合、「com.acme.runner」となります)。
- 下にスクロールして、
Sign In With Apple
をチェックします。 - 右上の
Continue
をクリックします。 - 右上の
Register
をクリックします。
Service IDを取得
ユーザーを認証する際にAPIを呼びだす際に、client_id
として使用します。
Certificates, Identifiers & Profiles
にアクセスします。- 左側の
Identifiers
をクリックします。 - 左上の
Identifiers
の隣にある+
マークをクリックします。 Services IDs
を選択し、Continue
をクリックします。- 情報を記入します。
- アプリの説明を入力します。
- Bundle ID(前のステップと同じBundle IDを使用できませんが、先頭に「app.」のように何かを追加して、app.com.acme.roadrunnerなどができます)。
- このIDを保存してください。このIDは後で
client_id
になります。 - 右上の
Continue
をクリックします。 - 右上の
Register
をクリックします。
コールバックURLを入手
次の手順では、次のようなコールバックURLが必要になります。
https://<project-ref>.supabase.co/auth/v1/callback
- Supabaseプロジェクトのダッシュボードにアクセスします。
- 左サイドバーの下部にある
Settings
アイコンをクリックします。 - リストの中の
API
をクリックします。 Config
のURL
の下にAPI URLがあるので、Copy
をクリックしてクリップボードにコピーします。- 末尾に
/auth/v1/callback
を追加することで、完全なOAuth Redirect URI
を取得できます。
Service IDを設定
Identifiers
で、新しく作成した「Services ID」をクリックします。Sign In With Apple
の隣にあるボックスをチェックして有効にします。- 右側の
Configure
をクリックします。 Primary App ID
に新しく作成したBundle ID
が選択されていることを確認します。Domains and Subdomains
ボックスにドメインを追加します(https://
は追加せず、ドメインだけを追加します)。Return URLs
ボックスに、前の手順で入手したアプリのコールバックURLを入力し、右下のNext
をクリックします。- 下部の
Done
をクリックします。 - 右上の
Continue
をクリックします。 - 右上の
Save
をクリックします。
Secret Keyをダウンロード
次に、client_secret
を生成するために使用するsecret key
ファイルをAppleからダウンロードする必要があります。
Certificates, Identifiers & Profiles
にアクセスします。- 左側の
Keys
をクリックします。 - 左上の
Keys
の隣にある+
マークをクリックします。 Key Name
を入力します。Sign In with Apple
にチェックを入れます。- 右側の
Configure
をクリックします。 - 新たに作成したService IDをドロップダウンセレクターから選択します。
- 右上の
Save
をクリックします。 - 右上の
Continue
をクリックする。 - 右上の
Register
をクリックします。 - 右上の
Download
をクリックします。 - ダウンロードしたファイルを保存します。このファイルには、
client_secret
を生成するために使用されるsecret key
が含まれています。 - 右上の
Done
をクリックします。
client_secret
を生成
ダウンロードしたsecret key
は、ユーザー認証に必要なclient_secret
の文字列を作成するために使用します。
Appleのドキュメントによると、P-256曲線によるElliptic Curve Digital Signature Algorithm(ECDSA - 楕円曲線DSA)とSHA-256ハッシュアルゴリズムで暗号化されたJWTトークンである必要があります。
現時点では、このJWTトークンを生成する最も簡単な方法はRubyです。Rubyがインストールされていない場合は、こちらからRubyをダウンロードしてください。
- Rubyをインストールします(または、システムにインストールされているかどうかを確認します)。
- ruby-jwtをインストールします。
- コマンドラインで、
sudo gem install jwt
を実行します。
テキストエディターでsecret_gen.rb
というファイル名で、以下の内容でスクリプトを作成します。
require "jwt"
key_file = "Path to the private key"
team_id = "Your Team ID"
client_id = "The Service ID of the service you created"
key_id = "The Key ID of the private key"
validity_period = 180 # In days. Max 180 (6 months) according to Apple docs.
private_key = OpenSSL::PKey::EC.new IO.read key_file
token = JWT.encode(
{
iss: team_id,
iat: Time.now.to_i,
exp: Time.now.to_i + 86400 * validity_period,
aud: "https://appleid.apple.com",
sub: client_id
},
private_key,
"ES256",
header_fields=
{
kid: key_id
}
)
puts token
secret_gen.
rbファイルを編集します。
key_file
= "Path to the private key you downloaded from Apple"(Appleからダウンロードしたプライベートキーのパス)には、AuthKey_XXXXXXXX.p8
のようにします。team_id
= "Your Team ID"(チームID)には、Apple Developerサイトの右上(あなたの名前の隣)でみつけることができます。client_id
= "The Service ID fo the service your created"(作成したサービスのService ID)には、上記手順のService IDを取得
で作成したService ID
です。このIDを紛失してしまった場合は、Apple Developerサイトでみつけることもできます。Certificates, Identifiers & Profiles
にアクセスします。- 左側の
Identifiers
をクリックします。 - 右上のドロップダウンで
Services IDs
を選択します。 - リストの中から自分のIdentifierを見つけます(例:app.com.acme.roadrunner)。
key_id
= "The Key ID of the private key"(プライベート・キーID)は、ダウンロードした秘密鍵ファイルの名前に含まれています(AuthKey_XXXXXXXX.p8
というファイルの場合、key_idはXXXXXXXXX
です)。もしこのIDを紛失してしまった場合は、Apple Developerサイトでみつけることができます。Certificates, Identifiers & Profiles
にアクセスします。- 左側の
Keys
をクリックします。 - リストの中から新しく作成したキーをクリックします。
Key ID
の下にある「key_id」を探します。
- コマンドラインから、
ruby secret_gen.rb > client_secret.txt
を実行します。 - これで、
client_secret
がclient_secret.txt
に格納されました。
SupabaseにOAuth認証情報を追加
<<<<<<< HEAD
- Supabaseプロジェクトのダッシュボードに移動します。
- 左側のサイドバーで、
Authentication
アイコンをクリックします(上部付近)。 - リストから
Settings
をクリックし、Authentication Settings
ページを表示します。 Site URL
にアプリの最終的な(ホストされた)URLを入力します(これは重要です)。External OAuth Providers
でApple Enabled
をオンにします。- 前述の手順で保存した
client_id
とclient_secret
を入力します。 Save
をクリックします。- Go to your Supabase Dashboard.
- In the left sidebar, click the
Authentication
icon (near the top). - Click
Settings
from the list to go to theAuthentication Settings
page. - Enter the final (hosted) URL of your app under
Site URL
(this is important). - Under
External OAuth Providers
turnApple Enabled
to ON. - Enter your
client_id
andclient_secret
saved in the previous steps. - Click
Save
.b4d6d8534a9f838d4e363dc509a3d67657e71da7
クライアント・アプリにログインのコードを追加
JavaScriptのクライアント・コードはこちらに記載:Supabase OAuthクライアントコード
const { user, session, error } = await supabase.auth.signIn({
provider: 'apple',
})
ボタン、リンク、またはUI要素から呼びだすための関数を追加します。
async function signInWithApple() {
const { user, session, error } = await supabase.auth.signIn({
provider: 'apple',
})
}
ログアウトするには次の関数を使います。
async function signout() {
const { error } = await supabase.auth.signOut()
}
リソース
- Apple Developerアカウント
- Rubyドキュメント
- ruby-jwtライブラリー
- Sign In with Appleを設定する方法で全ての作業をしてくれたJanak Amarasena氏に感謝します