Closed LineNo2 closed 1 year ago
기존 kakao
처럼의 jaribean://
의 콜백은 필요하지 않을 것 같습니다. 해당 핑퐁 과정은 스킵하고, 바로 code
를 받아 검증하는 작업 후 로그인 처리 해주시면 될 것 같습니다.
client_secret
다음의 형태로 작성하시면 됩니다.
{
"alg": "ES256",
"typ": "JWT",
"kid": "***"
}
alg
: 암호화 알고리즘은 반드시 ES256
을 사용kid
: Apple 로그인을 위해 발급받은 소셜 로그인 키의 id{
"iss": "***",
"exp": 1694846901,
"aud": "https://appleid.apple.com",
"sub": "com.99degree.jari-bean",
"iat": 1694843301
}
iss
: 각 애플 개발자 계정의 idiat
: 현재 시간exp
: 만료 시간; 절대 현재 시간 + 6개월
보다 큰 값이면 안됨.aud
: "https://appleid.apple.com"로 고정sub
: "com.99degree.jari-bean"로 고정; 앱의 패키지 명임인증키를 통해 ES256
사인을 하시면 됩니다. 제가 .p8
및 .pem
형태의 인증서를 둝다 드릴테니, 편하신 방법을 골라서 서명해주시면 될 것 같습니다. 아래 예시코드에는 .p8
형태를 사용하고 있네요. 근데 아마 .pem
형식을 쓰시면 저 변환 함수가 따로 필요 없고 그냥 key
만 읽어오시면 될겁니다.
Jwts.builder()
.setHeaderParam("kid", keyId)
.setHeaderParam("alg", "ES256")
.setIssuer(teamId)
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(expirationDate)
.setAudience("https://appleid.apple.com")
.setSubject(clientId)
.signWith(SignatureAlgorithm.ES256, getPrivateKey())
.compact();
private PrivateKey getPrivateKey() throws IOException {
ClassPathResource resource = new ClassPathResource("***.p8");
String privateKey = new String(Files.readAllBytes(Paths.get(resource.getURI())));
Reader pemReader = new StringReader(privateKey);
PEMParser pemParser = new PEMParser(pemReader);
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PrivateKeyInfo object = (PrivateKeyInfo) pemParser.readObject();
return converter.getPrivateKey(object);
}
여기에 사용된 kid
와 iss
는 노출되면 안되기 때문에, 제가 따로 전달해드리겠습니다.
/auth/token
해당 엔드포인트에 요청하시면, 다음과 같은 형태로 도착합니다. Postman에도 있으니까, 확인해보시면 될 듯 합니다. client_secret
값을 고정된 값으로 하시면 아마 안될겁니다. 유효기간에서 문제가 발생할 듯 싶기때문에 상단 함수를 그대로 사용하시면 될 듯 합니다.
{
"access_token": "...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "...",
"id_token": "..."
}
여기서 저희는 id_token
만 가지고 오면 유저의 정보를 확인할 수 있습니다.
여기서 sub
를 보시면 됩니다. 각 서비스에 대해 애플에서 생성해주는 각 유저에 대한 유일한 값이라고 합니다. 아무튼 중복될 걱정이 없다는 것이니, 이거 사용하셔서 유저 생성하시면 될 것 같습니다.
수정사항
기존
kakao
처럼의jaribean://
의 콜백은 필요하지 않을 것 같습니다. 해당 핑퐁 과정은 스킵하고, 바로code
를 받아 검증하는 작업 후 로그인 처리 해주시면 될 것 같습니다.
소셜 로그인 기능을 구현하기 위한 Redirect URI, Client ID, Client Secret에 대한 정보가 필요합니다! 공유 부탁드리겠습니다!
수정사항
기존
kakao
처럼의jaribean://
의 콜백은 필요하지 않을 것 같습니다. 해당 핑퐁 과정은 스킵하고, 바로code
를 받아 검증하는 작업 후 로그인 처리 해주시면 될 것 같습니다.소셜 로그인 기능을 구현하기 위한 Redirect URI, Client ID, Client Secret에 대한 정보가 필요합니다! 공유 부탁드리겠습니다!
RedirectURI
는 저희가 SDK를 활용해서 로그인을 하고 + iOS에서만 지원 할 예정이기 때문에 따로 필요가 없을 것 같습니다.
ClientSecret
은 저희가 *.p8
또는 *.pem
인증서를 통해 jwt
를 발급하면 만들 수 있습니다. 이점은 Postman 참고하시면 될 것 같습니다.
인증서는 제가 메일로 보내드리겠습니다.
✏️ Description
Apple Social Login을 구현한다. 프론트 이슈를 참고한다.
🛠 Features
code
수신client_secret
을 생성accessToken
수신프론트에jaribean://
형태로 callback 보내주기❗Warning
client_screct
생성을 위한 인증서 파일이 노출되지 않도록 관리📖 Reference