API로 올바른 사용자+비밀번호 조합 확인하는 방법?

여러분 안녕하세요,

기존의 Discourse 사용자 이름/비밀번호를 사용하여 원격 웹사이트에 로그인하는 방법에 대해 조언을 구하고 싶습니다.

SSO는 필요하지 않을 것 같습니다. 그 이유는 다음과 같습니다.

먼저, 현재 사용 중인 시나리오와 제가 이 방식을 선호하지 않는 이유에 대한 배경 설명을 드리겠습니다.

현재 저는 https://www.example.com이라는 웹사이트를 운영 중이며, 이 사이트에는 로그인 버튼이 있습니다.

사용자가 로그인 버튼을 클릭하면 기존 Discourse 사용자 이름과 이메일 주소를 입력하도록 요청받습니다. (참고: 사용자 이름 + 이메일, 비밀번호가 아님)

그 다음 이 두 가지 정보를 가져와서 다음 주소로 API GET 요청을 보냅니다:

"https://mydiscourse.comm/admin/users/list/all.json?email=" + strEmail

이 API 호출의 헤더에는 “system” 사용자 계정 이름과 해당 시스템 사용자의 API 키를 포함합니다.

이메일 주소가 일치하는 경우, 제 폼에서 제공받은 사용자 이름을 해당 이메일 주소에 대해 API 응답으로 반환된 사용자 이름과 비교합니다.

일치하면 이 사용자가 제 사이트 https://www.example.com에 로그인된 것으로 간주합니다.

이것은 3~4년 전에 구축한 것이며, 지금까지도 잘 작동하고 있습니다.

하지만…

  1. 로그인 폼에서 사용자 이름 + 이메일 주소 조합을 입력하는 것은 사용자에게 매우 혼란스럽습니다.
    – 대부분의 사람은 항상 사용자 이름 + 비밀번호를 입력합니다.
    – 제 폼 곳곳에 대량의 설명이 있음에도 불구하고, 사람들은 여전히 본능적으로 잘못 입력합니다.

  2. 보안이 취약합니다.
    – 사용자 이름과 이메일 주소만 알면, 이 두 가지(단순한) 정보로 https://www.example.com에 “그 사람으로” 로그인하는 것이 매우 쉽습니다.

제가 하고 싶은 것은 사용자가 https://www.example.com의 로그인 버튼을 클릭하고 기존 Discourse 사용자 이름 + 비밀번호(사용자 이름 + 이메일이 아닌!)를 입력하는 것입니다.

그렇게 되면 example.com의 제 웹사이트가 Discourse로 빠른 API 요청을 보내, 제공된 사용자 이름/비밀번호 조합이 올바른지 확인하고 기존 Discourse 사용자 ID를 반환받으면 됩니다.

이해가 되시는지 모르겠습니다 :grimacing:

API 문서를 끝까지 찾아보았지만, 단순한 “login” 엔드포인트를 찾을 수가 없습니다 :thinking:

제 Discourse 자체에서 사람들을 로그인/로그아웃시키는 것은 필요하지도, 원하지도 않습니다. 단순히 그들의 사용자 이름/비밀번호가 올바른지만 확인하면 됩니다.

어떤 지침, 조언, 링크나 조언이든 매우 환영합니다 :blush:

사용자의 원본 비밀번호를 반환하는 API 경로는 없으므로, 이 접근 방식이 작동하지 않을 것 같습니다. 설명을 들어보면 웹사이트를 위해 Discourse를 SSO 제공자로 사용하려는 것으로 보입니다. 그렇게 설정하는 방법은 가능합니다. 설정 방법에 대한 자세한 내용은 여기에 있습니다: Use Discourse as an identity provider (SSO, DiscourseConnect).

@simon 감사합니다. 그 링크를 잠깐 살펴보니 제가 필요로 하는 것이 바로 그것인 것 같습니다.

읽어보겠습니다 :nerd_face: