OAuth2 사용자 ID로 프로그래밍 방식으로 사용자 생성

REST API를 통해 user_associated_account 테이블에 행을 삽입하는 방법이 있을까요?

컨텍스트를 설명하자면, Discourse 인스턴스에서 사용자를 생성하고 해당 사용자를 우리의 OAuth2 제공업체와 연결할 수 있어야 합니다.
사용자가 Discourse UI( OAuth2 Basic 플러그인을 통해)에서 로그인하면 계정이 연결되고, GET /u/by-external/oauth2_basic/{external_uid}를 사용하여 외부 UID로부터 Discourse 사용자 ID를 가져올 수 있습니다.
그러나 REST API(POST /users.json)를 통해 사용자를 생성할 때, 해당 사용자의 계정을 해당 OAuth2 계정과 연결하는 방법을 찾지 못했습니다(사용자가 Discourse에서 수동으로 로그인하지 않는 경우).

참고로, OAuth2 basic 플러그인은 새로운 Auth::ManagedAuthenticator 시스템을 구현했습니다: Move to ManagedAuthenticator - Pull Request #21 - discourse/discourse-oauth2-basic - GitHub

시도해 본 내용:

  • API 문서를 확인했지만 관련 단서를 찾지 못했습니다.
  • 특정 사용자의 연결된 계정을 가져오기 위해 호출되는 API 라우트를 찾았습니다: GET /u/{username}/emails.json. 하지만 이 라우트는 HTTP PUT 메서드를 지원하지 않으며, user_associated_accounts 테이블의 필드(provider_name, provider_uid, user_id)를 노출하지 않습니다.
  • 이 문제와 관련이 있을지 Discourse 설정도 확인해 보았지만 성공하지 못했습니다.
  • meta.discourse.org를 검색해 보았지만 해결책을 찾지 못했습니다.

도움 주시면 감사하겠습니다. 감사합니다 :slight_smile:

OAuth에 등록된 이메일 주소와 동일한 이메일로 사용자를 생성하면 걱정할 필요가 없습니다.

피드백 감사합니다!
걱정하지 않으려 하지만, 내 프로바이더 ID로 사용자를 가져올 수 있어야 합니다(GET /u/by-external/oauth2_basic/{external_uid}).
사용자가 UI를 통해 수동으로 로그인하지 않는 한(이를 피하고 싶습니다) 이것이 불가능합니다.

새 사용자를 생성할 때 associated_accounts를 다음과 같이 노출하는 것이 좋겠습니다:

POST /users.json
{
  username: "something",
  email: "test@test.com",
  associated_accounts: [
    {
      provider_name: "oauth2_basic",
      provider_uid: "12345"
    }
  ]
}

이 방식이 완벽할 것 같습니다!

참고: 이는 Gitlab Users API의 provider 및 extern_uid 매개변수와 유사합니다(Users API | GitLab Docs).