
https://appleid.apple.com이다.public class SignMemberRequest {
private CertificationSubject certificationSubject;
private String socialToken;
}
기존에는 위와 같이 로그인을 위한 요청을 받고 있었다.
하지만 이를 그대로 사용하기에는 Apple 로그인을 위해 받아야 할 요소는 많았다.
하지만 certificationSubject 그리고 socialToken 는 Apple 로그인을 위해서도 필요한 정보이기에 아래와 같이 상속받아 구현하였다.
정확히는 socialToken이 아닌 token이 필요했다.
public class AppleSignMemberRequest extends SignMemberRequest {
private String idToken;
private String code;
private String nonce;
private AppleUserInfo user;
public String getName() {
return this.getUser().getName();
}
@Deprecated
@Override
public String getSocialToken() {
return getIdToken();
}
}
위에서 조금 특이한 부분은 getSocialToken()의 @Deprecated이다.
Apple 로그인에는 socialToken이 아닌 idToken을 받는다.
하지만 SignMemberRequest에는 socialToken 필드가 있다.
그렇기에 getSocialToken()을 사용하는 경우를 대비하여야 하는 데 본인은 우선 @Deprecated를 붙여 사용하지 않을 것을 권장하고
리턴값은 null 값일 socialToken이 아닌 getIdToken()을 통해 idToken에 해당하는 값을 리턴하였다.
@Getter
@Component
public class AppleAuthProperty extends AuthRequestProperty {
@Value("${apple.key.uri}")
private String keyURI;
@Value("${apple.key_id}")
private String keyId;
@Value("${apple.client_id}")
private String clientId;
@Value("${apple.team_id}")
private String teamId;
public AppleAuthProperty(
@Value("${apple.host}") String host,
@Value("${apple.token.uri}") String uri,
@Value("${apple.unlink.uri}") String unlink) {
super(host, uri, unlink);
}
@Override
public String getAdminKey() {
return null;
}
}
기존 AuthRequestProperty에는 host, uri, unlik와 같이 Oauth2.0을 위한 기본적인 프로퍼티는 가지고 있다.
하지만 Apple 로그인을 위해서는 위에서 확인할 수 있듯 이보다 많은 프로퍼티가 필요하고 이를 위해 AuthRequestProperty를 상속하여 AppleAuthProperty를 만들었다.
그렇기에 Apple 로그인에서 원하는 프로퍼티를 모두 사용하기 위해서는 AuthProperty를 반환해주는 기존 코드의 getMemberProperty()의 값을 AppleAuthProperty로 캐스팅하여 사용해야 한다.
이렇게 AppleAuthProperty를 만든 이후에는AppleAuthProperty와 RequestBody의 AppleSignMemberRequest의 필드를 활용하여 이후 작업을 수행해주면 된다.
getName()을 통해 MemberInfo 생성