반응형
안녕하세요 코딩하는헬린이 입니다
3대 500을 위하여 ~ ~
이번에 애플에서 회원 탈퇴시 토큰을 강제로 revoke 시켜야 앱 심사가 통과한다해서 뭐 기능을 만들었습니다.
어려운 기능은 아니지만 나중에 제가 또 복붙해서 쓸수있기에 남기는중이에요
자판 치는건 귀찮~ 근손실~
revoke 또는 login 시킬려면 clientSecret 이 필요 apple api 호출할때 필수값입니다.
아래는 애플 clientSecret(JWT) 만드는 방식입니다.
여러 방법이 많겠지만 저는 간단하게~
public String createClientSecret() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
Date now = new Date();
Date expiration = new Date(now.getTime() + 3600000);
return Jwts.builder()
.setHeaderParam("alg", "ES256")
.setHeaderParam("kid", kid)
.setSubject(clientId)
.setIssuer(iss)
.setAudience(appleUrl)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.ES256, getPrivateKey())
.compact();
}
private static PrivateKey getPrivateKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
InputStream privateKey = new ClassPathResource("appleAuthKey.p8").getInputStream();
String result = new BufferedReader(new InputStreamReader(privateKey)) .lines().collect(Collectors.joining("\n"));
String key = result.replace("-----BEGIN PRIVATE KEY-----\n", "")
.replace("-----END PRIVATE KEY-----", "");
byte[] encoded = Base64.decodeBase64(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory keyFactory = KeyFactory.getInstance("EC");
return keyFactory.generatePrivate(keySpec);
}
밑에는 JWT 토큰 형식이며 풀이하자면
alg는 ES256를 사용한다.
kid는 Apple Developer 페이지에 명시되어있는 Key ID 이다.
iss는 Apple Developer 페이지에 명시되어있는 Team ID
iat는 client secret이 생성된 일시를 입력
exp는 client secret이 만료될 일
aud는 https://appleid.apple.com 값을 입력
sub는 위에서 얘기한 client_id 값을 입력
sing 하실때는 애플에서 다운받은 p8키로 가져오셔서 하시면 됩니다.
{
"alg": "ES256",
"kid": "ABC123DEFG"
}
{
"iss": "DEF123GHIJ",
"iat": 1437179036,
"exp": 1493298100,
"aud": "https://appleid.apple.com",
"sub": "com.mytest.app"
}
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring boot] embedded mongodb replica 설정 (0) | 2022.02.09 |
---|---|
[Spring] poi 병목현상 해결! (0) | 2020.11.12 |
[Spring] poi를 이용한 excel 다운로드 (0) | 2020.11.06 |
[Spring] 파일 정보를 못가져오는 에러! MultipartFile에 Xss Filter적용 (0) | 2020.10.30 |
[Spring] 스프링부트 시큐리티를 이용한 로그인! (0) | 2020.10.19 |