죄송합니다.... 이 질문을 완전히 바꿔서 말씀드리고 싶습니다.같은 질문지금 정보 보안에 대해
제가 작업 중인 시스템에는 모바일 애플리케이션, 웹 포털 및 HTTP 기반 API가 포함됩니다.
답을 찾을 수 없을 것 같은 질문:
openid connect 및/또는 oauth 토큰 엔드포인트를 구현하고 클라이언트가 액세스할 수 있는 토큰을 생성해야 합니까?나의API? 아니면 클라이언트가 사용자의 오픈 ID 공급자가 발행한 토큰을 사용하여 API에 액세스할 수 있도록 "어떻게든" 활성화합니까?
추가 배경:
사용자가 Google/Facebook ID를 사용하여 등록하고 로그인할 수 있도록 하고 싶습니다.
API 내에서 나는 이보다 더 필요하지 않기 때문에 최소한의 몇 가지 속성을 가진 사용자 테이블을 저장하지만 기본적으로는 다음과 같습니다.
테이블 사용자:
- uid
- real_name
- contact_number
- email_address
- is_active
- have_admin_rights
또한 다음과 같이 사용자의 공개 ID에 대한 테이블을 설정합니다.
테이블 open_ids:
- uid
- user_id (참조 users(uid)
- open_id
(사용자가 자신의 계정과 연결하려는 Open-ID를 사용할 수 있도록)
다른 곳에서는 사용자 ID를 참조합니다. 예:
Table foo:
- uid
- bar
- bla
- last_modified_by_user_id (References users(uid))
현재 테스트 설정에는 "passwords" 테이블이 있습니다. 예:
테이블 비밀번호:
- uid
- user_id (References users(uid))
-password_hash
(참고: 이 테이블을 곧 제거하고 대신 open_id를 사용하는 것이 좋습니다. 하지만 어떤 라이브러리를 선택하는지는 구현하는 기능과 외부 소스에서 사용하는 기능에 따라 크게 달라집니다.)
이미 소셜 서비스 프로필에 있는 사용자 데이터를 복제하지 않고 각 사용자가 수시로 해당 서비스에 액세스해야 하기 때문에 액세스 토큰을 저장해야 한다는 사실을 알게 되었습니다. 하지만 클라이언트(사용자가 가입한 곳)에서 API(다양한 클라이언트 간의 공유 리소스)로 액세스 토큰을 가져오는 방법은 무엇입니까?
문제는 실제로 클라이언트에서 API로 토큰을 너무 많이 보내는 것이 아닙니다. 사용자가 인증될 때 사용자와 다른 엔드포인트를 "등록"하는 기능을 API에 포함할 수 있습니다. 문제는 액세스 토큰이 하나의 특정 클라이언트에만 사용된다는 것입니다.
인증 서버를 구현하지 않고 어떻게든 Google 등의 서비스를 사용할 수 있다고 가정합니다. 개발자 사이트(예: Google, Facebook)에서 내 클라이언트를 등록하고 클라이언트 비밀번호/클라이언트 ID를 발급받을 수 있지만 그런 다음 사용합니까? 클라이언트와 API 모두에서 동일한 클라이언트 자격 증명이 필요합니까?
아니면 클라이언트 자격 증명은 API에 의해서만 유지되고 프런트 엔드 서비스는 사용자가 등록할 때 중간 단계로 API에 의존합니까? 이것은 불안한 상태에 있어서 매우 위험하다고 느낍니다. 그렇다면 OpenID 공급자의 관점에서 API는 또 다른 별도의 클라이언트입니까?
인증 서버를 구현해야 한다고 가정하면 오픈 ID 공급자도 되어야 합니까? 이 경우에는 인증과 승인이 모두 필요하기 때문에 openid-connect가 필요한 것 같습니다. 하지만 이 경우 신규 사용자 등록을 수행하는 방법에 대해 정말 잘 모르겠고 이전 질문도 실제로 사라지지 않습니다. 클라이언트가 연결하여 Open IdP에서 사용자 인증/액세스 및 ID 토큰을 가져온 다음 API에 사용자를 "등록"할 수 있어야 할 것 같습니다.