Sign in with Apple

1번과 2번 문제는 Apple의 의도적인 구현 선택으로 인해 발생합니다. 따라서 이는 엄밀히 말해 기술적 사고가 아니며, 우회 처리가 가능합니다. 3번 문제는 omniauth-apple gem과 관련되어 있으므로 수정이 가능합니다.

Apple에서 필요한 것은 후속 인증 플로우에서 이름/이메일을 포함시켜 주는 것입니다. 불행히도 Apple은 해당 동작을 인정하면서도, 이는 의도된 동작이라고 밝혔습니다. Security Verification

이는 올바르게 동작합니다. 사용자 정보는 최초 사용자 가입 시에만 ASAuthorizationAppleIDCredential에 포함되어 전송됩니다. 동일한 계정으로 Sign In with Apple을 사용하여 앱에 후속 로그인할 경우 사용자 정보는 공유되지 않으며, ASAuthorizationAppleIDCredential에는 사용자 식별자만 반환됩니다. 서버에서 계정이 성공적으로 생성되었음을 검증할 수 있을 때까지 사용자 정보를 포함하는 초기 ASAuthorizationAppleIDCredential을 안전하게 캐싱하는 것이 권장됩니다.

그런데 궁금한 점이 하나 있습니다. 다른 웹사이트에서 Sign In with Apple을 사용하는 사례를 본 적이 있으신가요? 저는 네이티브 앱에서만 사용해 본 것 같습니다 :thinking:

3개의 좋아요

저에게는 이 기능이 매우 합리적으로 보입니다. 저희 iOS 앱이 discourse 웹으로 연결되는데, 앱의 다른 기능들은 로그인 없이도 사용 가능하기 때문입니다.
대부분의 사용자가 이미 해당 기기에서 로그인되어 있고, 인앱 결제에 사용되는 Apple Pay도 동일한 계정을 사용하므로, 이 방식으로 로그인하는 것은 사용자에게 매우 편리합니다.

개인적으로 Apple DTS에 이 문제에 대해 문의하여 그들이 제안하는 우회 방법을 확인하고, 또한 이것이 문제를 일으키고 있다는 피드백을 전달하는 것이 여전히 의미 있다고 생각합니다. (불행히도 저는 이 부분에 대해 충분히 지식이 없어서 그들과 직접 대화를 나눌 수 없습니다.)

Google/FB 등과 비교하면 보편적이지는 않지만, ebay.com, wordpress.com, kayak.com 등 몇몇 곳에서 사용되고 있는 것을 확인했습니다.

3개의 좋아요

다만 다른 API를 사용할 수도 있습니다. 추가할 수 있는 JS 스크립트가 있지만, 이는 Discourse의 보다 일반적인 OAuth 시스템과 통합되지 않을 것 같습니다:

Kayak.com을 예로 들어보겠습니다.

브라우저 인스펙터로 조금만 살펴보면 이것을 발견할 수 있습니다:

image

1개의 좋아요

그들은 Apple의 JavaScript 라이브러리를 사용하고 있습니다. 하지만 여전히 동일한 ‘OAuth’(실제로는 OAuth가 아님) API를 백그라운드에서 사용하고 있습니다.

eBay는 사용자 정보를 가져오려는 시도조차 하지 않습니다. Apple로 로그인한 후에는 이메일 주소를 입력하라는 메시지가 표시됩니다:

Kayak과 Wordpress는 Apple의 권장 사항에 따라 첫 번째 인증 시도에서 사용자 정보를 캐싱하고 있을 것으로 추정됩니다.

우리가 채택해야 할 접근 방식이 아마도 이 방식일 것 같지만, 특히 견고하지는 않습니다(예: 첫 번째 시도 중 네트워크 연결이 끊기거나, Discourse가 백업에서 복원되거나, 사용자가 Apple 이메일 주소를 변경하는 경우). 그리고 제 생각에는 프라이버시 측면에서도 약간 나쁜 면이 있습니다(아직 가입하지도 않은 사용자의 이메일 주소를 저장해야 하니까요!).

6개의 좋아요

최근 Apple iOS 변경 사항으로 인해 이제 이 작업이 가능하다고 생각합니다. 맞나요?

3개의 좋아요

최근 Apple 로그인과 관련하여 변경된 사항이 있나요?

현재 상태 그대로 작동하도록 설정하는 것은 충분히 가능합니다. 다만 이러한 문제들을 우회하는 데 며칠이 소요될 것입니다. 하지만 그렇게 하더라도 여전히 최초 로그인 시에만 이메일/이름을 받을 수 있는 상태에 머물러 있게 됩니다.

5개의 좋아요

조금 다듬은 것 같긴 한데, 구체적인 변경 사항을 쉽게 찾아내기 어렵네요.

이메일을 한 번만 받는 건 큰 문제가 아닐 것 같은데요. Apple ID의 이메일을 변경했을 때 어떤 일이 일어나는지 테스트해 봐야 할 것 같습니다.

3개의 좋아요

같은 UID를 계속 수신해야 하지만, 새 이메일은 수신되지 않습니다. 사용자는 Discourse에서 수동으로 이메일을 업데이트해야 합니다.

3개의 좋아요

한 번 더 확인해 봐야겠지만, 솔직히 이게 거대한 논쟁이 되어 이 기능 구현을 막는다고 보진 않는다.

iDevice에서의 로그인 플로우, 특히 Apple 계정으로 로그인하는 방식은 정말 훌륭하고, Face ID를 통한 2FA도 함께 제공된다.

5개의 좋아요

:+1: 플러그인을 최신 상태로 업데이트하여 테스트할 수 있도록 내 목록에 추가할게요. 잘 작동하면 코어에 비교적 쉽게 이식할 수 있습니다.

13개의 좋아요

David에게 리포지토리를 넘겼고, 그는 Discourse로 옮겼습니다 :slight_smile:

이 일을 맡아 주셔서 감사합니다.

11개의 좋아요

이 주제를 2~3번 읽었지만, 여러분이 제공된 JWT 토큰에서 이메일을 가져오려고 시도해 보셨는지 기억이 나지 않습니다.

네이티브 코드에서는 이렇게 처리하고 있습니다. 웹 API에서도 이렇게 할 수 있는지 확실하지 않습니다.

처음 로그인할 때는 ASAuthorizationAppleIDCredential.email에서 이메일을 직접 가져올 수 있습니다.
이후 로그인 시에는 JWT 데이터를 디코딩하여 “email” 필드를 찾으면 이메일을 확인할 수 있습니다.

이렇게 하면 해당 기능을 구현할 수 있겠죠?
제공되는 이메일은 사용자가 선택한 개인 이메일이거나 랜덤 이메일입니다.

네, 맞습니다.

제 경험상 그렇지 않습니다. 마지막으로 확인했을 때, 이후 로그인 시 JWT에는 이메일이 포함되지 않았습니다.

어쨌든, 우리는 이 문제를 곧 해결할 계획이며, 준비가 되면 이 토픽을 업데이트하겠습니다 :slight_smile:

4개의 좋아요

정말 이상한 게, 네이티브에서는 JWT의 email 속성만 사용하면 잘 작동하거든요.

웹에서도 네이티브처럼 업데이트하지 않는다면, 유일한 해결책은 자동으로 더미 이메일(자동 인증 완료)을 생성한 뒤, 사용자가 원하면 나중에 변경할 수 있도록 하는 것일 수 있습니다.

이 경우 Apple이 제공하는 id에 의존하게 되는데, 나쁜 해결책은 아니지만, 뭔가 좀 그런 냄새가 납니다 :slight_smile:

4개의 좋아요

그들이 상황을 개선했을 가능성도 꽤 있습니다. 꼭 다시 확인해 보겠습니다 :+1:

6개의 좋아요

이 문제를 해결할 수 있다는 것을 알고 있습니다. 복잡해지는 부분은 다음과 같습니다:

  • Apple ID 이메일이 jane.champion@somewhere.com인 경우

  • Apple 계정으로 Discourse에 가입한 경우

  • Apple ID 이메일을 jane.row@somewhere.com으로 변경한 경우

  • Discourse에 로그인하면 … 시스템은 여전히 사용자를 jane.champion@somewhere.com으로 인식합니다

  • Discourse의 이메일 알림이 영원히 반송됩니다.

Apple ID 이메일이 변경될 때 어떤 프로세스가 적용되는지, 그리고 이에 대해 우리가 어떻게 대응할 수 있는지(대응이 가능한지) 명확하지 않습니다.

제 판단으로는 … 이러한 경계 사례는 그냥 받아들이고, 이런 특수한 경우를 위해 사용자가 Discourse에서 이메일을 직접 변경할 수 있도록 하는 것이 좋겠습니다.

3개의 좋아요

오늘 테스트를 해봤는데, 좋은 소식은 Apple이 문제를 수정한 것 같습니다 :smiley: 모든 인증 과정에서 이메일 주소가 정상적으로 표시되고 있습니다.

아직 해결해야 할 문제가 몇 가지 있지만, 이번 주 안에 공개할 수 있기를 바랍니다.

13개의 좋아요

이것은 확실히 Discourse와 함께 배포할 후보라고 생각합니다. 다음 주요 릴리스에서 코어를 가져오거나, 최소한 플러그인을 번들링하도록 해야 합니다. (물론 다음 주에는 아닙니다 :slight_smile: )

13개의 좋아요

네, 나중에 최소한의 노력으로 플러그인에서 코어로 이동할 수 있습니다. 다만 구글/페이스북 등과 비교했을 때 설정이 엄청나게 어렵다는 문제가 있습니다.

(유료인) Apple 개발자 계정이 필요하고, 도메인 인증과 인증서 등 다양한 설정을 해야 합니다. 하지만 좋은 howto 문서만 있다면 충분히 가능합니다.

13개의 좋아요