이오이오이오
코딩하는헬린이
이오이오이오
전체 방문자
오늘
어제
  • 분류 전체보기 (39)
    • 기타 (2)
      • 잡다한 (2)
      • 헬스 (0)
    • 개발 (21)
      • Sql (3)
      • Java (2)
      • Spring (8)
      • OAuth (4)
      • node.js (1)
      • AWS (1)
      • Linux (2)
    • 이론 (11)
    • Dev Tool (1)
      • IntelliJ IDEA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 블록체인지갑
  • Spring Boot
  • 카카오로그인
  • 니모닉
  • nft
  • 블록체인
  • java
  • oauth
  • POW
  • blockchain
  • webflux
  • Ipfs
  • restfulapi
  • db 성질
  • bip
  • 로이필링
  • pos
  • kakaologin
  • isolation level
  • springboot
  • Spring
  • reactive streams
  • RESTful

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이오이오이오

코딩하는헬린이

[Spring] apple client_secret (JWT) 생성
개발/Spring

[Spring] apple client_secret (JWT) 생성

2022. 9. 1. 11:55
반응형

안녕하세요 코딩하는헬린이 입니다

 

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
    '개발/Spring' 카테고리의 다른 글
    • [Spring boot] embedded mongodb replica 설정
    • [Spring] poi 병목현상 해결!
    • [Spring] poi를 이용한 excel 다운로드
    • [Spring] 파일 정보를 못가져오는 에러! MultipartFile에 Xss Filter적용
    이오이오이오
    이오이오이오

    티스토리툴바