์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋น์ทํ์ง๋ง, Apple์ ๊ฒฝ์ฐ ๋ฐฉ์์ด ์กฐ๊ธ ๋ค๋ฅด๋ค.
Apple์์๋ identity token์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ค๋น๊ณผ์
1. Apple Developer ๊ณ์
๋จผ์ ์ ํ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ํด์ Apple Developer ๊ณ์ ์ด ํ์ํ๋ค.
Apple Developer Program์ ๊ฐ์
ํ๋ ค๋ฉด $99 (์ฝ 129,800์)์ด ํ์ํ๋ค.
ํผ์ ์ฐ์ต์ฉ์ผ๋ก๋ ์กฐ๊ธ ๋ถ๋ด๋๋ ๊ฐ๊ฒฉ์ด๋ค. ๐ฅฒ
2. App ID ๋ฐ๊ธ
์ ํ Certificates, Identifiers & Profiles ํญ - Identifiers์์ ํ๋ฌ์ค ๋ฒํผ์ ๋๋ฌ ์ฑID๋ฅผ ๋ง๋ค์ด์ค๋ค.
์ฑ ID๋ฅผ ์ ํํ๊ณ ๋ค์์ ๋๋ฅธ๋ค.
App์ ์ ํํ๋ค.
Descripttion๊ณผ Bundle ID๋ฅผ ์
๋ ฅํด์ค๋ค.
๋ณดํต Bundle ID์๋ ํจํค์ง๋ฅผ ์ด๋ค. ex) com.demo
์๋์์ Sign in with Apple์ ์ ํํ๊ณ Edit๋ฅผ ๋๋ฅธ๋ค.
์๋ฒ์ ์ค๋ํฌ์ธํธ๋ฅผ ์
๋ ฅํ๊ณ ์๋ฃํ๋ฉด App ID๊ฐ ์์ฑ๋๋ค.
3. Apple Key ๋ฐ๊ธ
Keys ํญ์ผ๋ก ์์ ํ๋ฌ์ค ๋ฒํผ์ ๋๋ฌ ์๋ก์ด ํค๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค.
์ํ๋ ํค ์ด๋ฆ์ ์ฐ๊ณ , ์๋ Sign in with Apple์ ์ฒดํฌํ๊ณ Configure์ ๋๋ฅธ๋ค.
๋ฐฉ๊ธ ๋ฑ๋กํ๋ App ID๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
์ดํ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ฉด AuthKey_[KeyID].p8 ํ์ผ์ ๋ฐ์ ํ
๋ฐ, ์ฌ ๋ค์ด๋ก๋๊ฐ ์๋๋
์์คํ๊ฒ ๋ณด๊ดํด๋๊ณ , ์ ์ถํ์ง ๋ง์. (github์ ์ฌ๋ฆฌ์ง ์๋๋ก ์ฃผ์.)
4. Service ID ๋ฑ๋ก
๋ค์ Identifiersํญ์ผ๋ก ๋์์์, ์๋ก ํ๋ ๋ง๋ค์ด์ค๋ค.
์ด๋ฒ์ Service IDs๋ฅผ ์ ํํ๊ณ ๋ค์์ ๋๋ฅธ๋ค.
Description๊ณผ indentifier (Bundle ID ์ญ์)์ ์
๋ ฅํ๊ณ ๋ค์์ ๋๋ฅธ๋ค.
๋ค์์ ๋๋ฉ์ธ ์ค์ ์ด ๋์ค๋๋ฐ,
Domains and Subdomains - ์๋น์ค ๋๋ฉ์ธ
Return URLs - ์ฝ๋ฐฑ๋ฐ์ url
์ ์ฑ์ ๋ฃ๋๋ค.
localhost๋ ๋ค์ด๊ฐ์ง ์์ผ๋ฏ๋ก .shop๋ฑ ๋๋ฉ์ธ์ ํ๋ ๊ตฌ๋งคํ๋ ๋ฐฉ๋ฒ์ ์จ๋ ๋๋ค.
http๋ ๋ค์ด๊ฐ์ง ์์์, ์ธ์ฆ์ ์ค์ ๋ ํด์ค์ผํ๋ค.
๊ตฌํ
@Configuration
@EnableOAuth2Client
public class OAuth2ClientConfig {
@Value("${spring.security.oauth2.client.registration.apple.client-id}")
private String clientId;
@Value("${spring.security.oauth2.client.registration.apple.client-secret}")
private String clientSecret;
@Value("${spring.security.oauth2.client.registration.apple.redirect-uri}")
private String redirectUri;
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
ClientRegistrationRepository clientRegistrationRepository,
OAuth2AuthorizedClientRepository authorizedClientRepository) {
OAuth2AuthorizedClientProvider authorizedClientProvider =
OAuth2AuthorizedClientProviderBuilder.builder()
.authorizationCode()
.refreshToken()
.build();
DefaultOAuth2AuthorizedClientManager authorizedClientManager =
new DefaultOAuth2AuthorizedClientManager(
clientRegistrationRepository, authorizedClientRepository);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}
@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
return new InMemoryClientRegistrationRepository(this.appleClientRegistration());
}
private ClientRegistration appleClientRegistration() {
return ClientRegistration.withRegistrationId("apple")
.clientId(this.clientId)
.clientSecret(this.clientSecret)
.clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.redirectUri(this.redirectUri)
.scope("email")
.authorizationUri("https://appleid.apple.com/auth/authorize")
.tokenUri("https://appleid.apple.com/auth/token")
.userInfoUri("https://appleid.apple.com/auth/userinfo")
.userNameAttributeName(IdTokenClaim.SUB)
.jwkSetUri("https://appleid.apple.com
Apple ๋ก๊ทธ์ธ ํ์ด์ง์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์
๋ ฅํ๋ฉด, ์ ํ์์ ๋ฐ๊ธํ ์ธ์ฆ ํ ํฐ์ ๋ฐ์์์ Spring Security OAuth2๊ฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ์ ธ์จ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋ก์ด ๊ณ์ ์ ์์ฑํ๋ฉด ๋๋ค.
'BackEnd > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ๋ถ์ฐ ์์คํ ์์ ํจ๊ณผ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ (1) - RDB (1) | 2023.11.04 |
---|---|
[Spring] Docker์์ Static File ์ฒ๋ฆฌํ๊ธฐ (0) | 2023.09.02 |
[Spring] MongoDB ์ ์ฉ, ํ ์คํธ (0) | 2023.09.02 |
Spring ํ๊ฒฝ์์ Redis ์ฌ์ฉํ๊ธฐ (0) | 2023.09.01 |
[Java] Jwt๋ฅผ ์ด์ฉํ์ฌ Api์๋ฒ ๊ฐ์ธ์ ๋ณด ์ํธํํ๊ธฐ (0) | 2023.09.01 |