Skip to content

Commit

Permalink
Feature | #4 | @lcomment | OAuth 관련 Provider 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
lcomment committed May 2, 2024
1 parent 2c3ca17 commit a86df7b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
package com.cakk.api.provider.oauth;

import static com.cakk.common.enums.ReturnCode.*;
import static com.cakk.common.utils.DecodeUtils.*;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;

public abstract class OidcProvider {
import com.cakk.common.exception.CakkException;

public abstract String getProviderId(String idToken) throws GeneralSecurityException, IOException;
public interface OidcProvider {

protected Map<String, String> parseHeaders(String token) throws IOException {
String getProviderId(String idToken);

default Map<String, String> parseHeaders(String token) {
String header = token.split("\\.")[0];
return new ObjectMapper().readValue(decodeBase64(header), Map.class);

try {
return new ObjectMapper().readValue(decodeBase64(header), Map.class);
} catch (IOException e) {
throw new CakkException(INTERNAL_SERVER_ERROR);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,31 @@
package com.cakk.api.provider.oauth.impl;

import java.io.IOException;
import java.security.PublicKey;

import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;

import com.cakk.api.provider.jwt.JwtProvider;
import com.cakk.api.provider.oauth.OidcProvider;
import com.cakk.api.provider.oauth.PublicKeyProvider;
import com.cakk.client.vo.OidcPublicKeyList;
import com.cakk.client.web.AppleAuthClient;

public class AppleAuthProvider extends OidcProvider {
@Component
@RequiredArgsConstructor
public class AppleAuthProvider implements OidcProvider {

private final AppleAuthClient appleAuthClient;
private final PublicKeyProvider publicKeyProvider;
private final JwtProvider jwtProvider;

@Override
public String getProviderId(String idToken) {
return null;
final OidcPublicKeyList oidcPublicKeyList = appleAuthClient.getPublicKeys();
final PublicKey publicKey = publicKeyProvider.generatePublicKey(parseHeaders(idToken), oidcPublicKeyList);

return jwtProvider.parseClaims(idToken, publicKey).getSubject();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

@Component
@RequiredArgsConstructor
public class GoogleAuthProvider extends OidcProvider {
public class GoogleAuthProvider implements OidcProvider {

private final GoogleIdTokenVerifier googleIdTokenVerifier;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@
package com.cakk.api.provider.oauth.impl;

import java.security.PublicKey;

import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;

import com.cakk.api.provider.jwt.JwtProvider;
import com.cakk.api.provider.oauth.OidcProvider;
import com.cakk.api.provider.oauth.PublicKeyProvider;
import com.cakk.client.vo.OidcPublicKeyList;
import com.cakk.client.web.KakaoAuthClient;

@Component
@RequiredArgsConstructor
public class KakaoAuthProvider extends OidcProvider {
public class KakaoAuthProvider implements OidcProvider {

private final KakaoAuthClient kakaoAuthClient;
private final PublicKeyProvider publicKeyProvider;
private final JwtProvider jwtProvider;

@Override
public String getProviderId(String idToken) {
return null;
final OidcPublicKeyList oidcPublicKeyList = kakaoAuthClient.getPublicKeys();
final PublicKey publicKey = publicKeyProvider.generatePublicKey(parseHeaders(idToken), oidcPublicKeyList);

return jwtProvider.parseClaims(idToken, publicKey).getSubject();
}
}

0 comments on commit a86df7b

Please sign in to comment.