본문으로 건너뛰기
언어

@plott/webkit-auth-provider-apple0.4.0

@plott/webkit-auth-oauth 제공자 — Sign in with Apple(form_post, ES256 client_secret 자동 생성·교체)

설치

pnpm
pnpm add @plott/webkit-auth-provider-apple@0.4.0

진입점(exports)

import타입파일
@plott/webkit-auth-provider-apple./dist/index.d.ts./dist/index.js

@plott/webkit-auth-oauth 용 Sign in with Apple 정의입니다.

진입점

진입점실행 위치내보내는 것
@plott/webkit-auth-provider-apple서버apple, appleClientSecret, 타입 AppleKey, AppleOptions

붙이기

ts
import { apple } from "@plott/webkit-auth-provider-apple";
apple({  clientId: process.env.APPLE_SERVICE_ID!,  clientSecret: { teamId: process.env.APPLE_TEAM_ID!, keyId: process.env.APPLE_KEY_ID!, privateKey: process.env.APPLE_PRIVATE_KEY! },})
옵션기본값 / 뜻
clientId웹 로그인의 Service ID
clientSecret키 정보 { teamId, keyId, privateKey } 또는 미리 만든 client_secret(문자열·함수)
scopeopenid email name
secretTtlSeconds3600. client_secret JWT 수명. 300 초과 15777000 이하의 정수
issuerhttps://appleid.apple.com
idapple
responseModescope 에 name·email 이 있으면 form_post, 없으면 query. 직접 주면 그 값이 앞섭니다

appleClientSecret(key, clientId, ttlSeconds?) 는 client_secret 을 돌려주는 비동기 함수를 만듭니다.

기본으로 지키는 것

  • client_secret 은 Apple 개인 키(.p8)로 서명한 ES256 JWT 입니다. 만료 5분 전까지는 같은 값을 돌려주고 그 뒤에 새로 서명합니다.
  • 수명 상한은 Apple 이 받는 6개월(15777000초)입니다. 갱신 여유(5분) 이하의 수명은 매번 새로 서명하게 되므로 받지 않습니다. 범위를 벗어나면 @plott/webkit-auth-provider-apple: 로 시작하는 오류로 시작할 때 멈춥니다.
  • privateKey 는 .p8 파일 내용(PKCS#8 PEM)입니다. 비밀 관리자가 한 줄(\n 글자)로 넘겨도 받습니다. PEM 이 아니면 첫 로그인(exchange_failed)이 아니라 시작할 때 멈춥니다. 키는 저장소·환경 파일에 두지 않고 비밀 관리자(1Password 등)에서 주입합니다.
  • scope 에 name 또는 email 이 있으면 responseMode 는 form_post 이고, 없으면 query 입니다. Apple 은 name·email 을 요청하면 콜백을 크로스사이트 POST 로 보냅니다.
  • 토큰 엔드포인트 인증은 post, 네이티브 토큰은 id_token, 임베디드 웹뷰는 허용입니다.
  • 네이티브(iOS) identityToken 의 aud 는 Service ID 가 아니라 앱 번들 ID 입니다. 인증 서버(AS)가 둘 다 받아야 합니다.

그 밖

의존성: jose. peer: @plott/webkit-auth-oauth.