BackEnd/Spring Boot

[Spring] ์• ํ”Œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

ddonghyeo 2023. 9. 1. 23:54

์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋น„์Šทํ•˜์ง€๋งŒ, 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๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
๊ฐ€์ ธ์˜จ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.