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
- 손가락귀신
정신 못차리면, 벌 받는다.
,