Nexters-PIMO / PIMO_BE

0 stars 1 forks source link

애플로그인 세팅작업 #3

Closed ParkYunHo closed 1 year ago

ParkYunHo commented 1 year ago

What is the Issues?

애플로그인 세팅작업

Details

애플로그인 REST방식 작업

  • 애플로그인은 별도 SDK에서 토큰발급이 불가하여 서버를 통해서만 획득 가능

Process

  1. "/auth/keys" 애플API를 통해 kid, alg, n, e 객체 획득
    • apple keys
    • identity_token header와 애플API를 통해 얻은 keys정보간의 kid, alg가 같은 객체 획득
  2. identity_token을 이용한 JWT토큰 파싱 작업
    • 1번에서 획득한 객체정보를 통해 JWT 토큰 파싱
// expiredDate 정보는 의도적으로 길게 설정함
val expiredDate = Date.from(LocalDateTime.now().plusDays(30).atZone(ZoneId.systemDefault()).toInstant())

val authId = Jwts.parser()
    .setSigningKey(
        KeyFactory.getInstance("RSA")
            .generatePublic(
                RSAPublicKeySpec(
                    BigInteger(1, Base64.getUrlDecoder().decode(key?.n)),
                    BigInteger(1, Base64.getUrlDecoder().decode(key?.e))
                )
            )
    )
    .parseClaimsJws(idToken).body.subject

val token = Jwts.builder()
    .setHeaderParams(mapOf(
        "kid" to key?.kid,
        "alg" to key?.alg
    ))
    .setIssuer("pimo")
    .setIssuedAt(Date(System.currentTimeMillis()))
    .setExpiration(expiredDate)
    .setAudience("https://appleid.apple.com")
    .setSubject("auth")
    // 특정 사용자를 구분할 사용자ID를 의미
    .setClaims(mapOf("accountId" to authId))
    .signWith(SignatureAlgorithm.HS256, Base64.getEncoder().encodeToString(AppPropsUtils.findSecretKey("jwt").toByteArray()))
    .compact()
ParkYunHo commented 1 year ago

@okstring @0inn @yanghojoon 내일 IOS 회의하는걸로 알고있어서 위에 "Process" 부분에 전에 말했듯이 가라?!로 토큰획득하는 방식인데 확인 한번만 부탁할께 (스위프트랑 문법 비슷해서 코틀린 문법으로 전달했어)

okstring commented 1 year ago

구우웃 내일 확인해서 알려주께

okstring commented 1 year ago

@ParkYunHo

프로세스는 내가 알아본 것하구 맞아! 나중에 같이 라이브로 맞춰보면서 진행해보면 될 듯 해