'Encode'에 해당하는 글 1건

 

Oauth2.0 에서 Token 발급에 필요한 ClientId 와 SecretKey 생성하기.

 

 

ClientId

 

  • 일반적으로 길이 16~32자 16진수 문자열로 생성.
  • 모든 클라이언트에서 고유함.

 

SecretKey

 

  • 일반적으로 길이 32~64자 16진수 문자열로 생성.
  • TimeStamp / UUID 라이브러리 등은 지양.
  • 일반 암호와 동일하므로 DB 에는 암호화 되거나 해시된 버전으로 저장.

 

ClientId ex)

 

Foursquare: ZYDPLLBWSK3MVQJSIYHB1OR2JXCY0X2C5UJ2QAR2MAAIT5Q
Github: 6779ef20e75817b79602
Google: 292085223830.apps.googleusercontent.com
Instagram: f2a1ed52710d4533bde25be6da03b6e3
SoundCloud: 269d98e4922fb3895e9ae2108cbb5064
Windows Live: 00000000400ECB04
Okta: 0oa2hl2inow5Uqc6c357

 

 

Client Id / Secret Key 생성

 

commons-lang3 의 RandomStringUtils 를 사용하여 특정 길이의 랜덤한 문자열을 생성할 수 있다.

 

dependencies {
    implementation 'org.apache.commons:commons-lang3:3.12.0'
}

...

RandomStringUtils.randomAlphanumeric(32));  
// 1JhGTHmGlCP037aATyJzph983FRl5r14
RandomStringUtils.randomAlphanumeric(64));  
// 84ldr2jaagfMiIwzj2wFnaPxXBV2Yc9WC1AbJPaugEj5qHSWHkPjt2HInLdlzV7S

 

spring-security 를 사용할 경우, SecretKey 를 한번 더 암호화 하기 위해 BCryptPasswordEncoder 클래스를 사용한다.

 

PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodeKey = passwordEncoder.encode(secretKey);

 

PasswordEncoder.encode 는 항상 랜덤키를 생성하기 때문에 인코딩된 결과끼리의 비교는 불가능하지만, secretKey 와 encodeKey 의 비교는 가능하다.

 

if (passwordEncoder.matches(secretKey, encodeKey)) {
    System.out.println("matching~");
}

 

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,