본문으로 건너뛰기
문서 · 워크스페이스, 발급자, 토큰

개념

몇 가지 개념만 알면 Usher의 거의 모든 것을 이해할 수 있습니다. 무엇이 어디에 있는지, 누가 토큰을 발급하는지, 사람들이 어디서 로그인하는지, 각 토큰이 얼마나 유지되는지입니다.

워크스페이스, 프로젝트, 환경

  • 워크스페이스는 Usher Console 안의 팀 또는 회사입니다. 구성원과 감사 로그가 워크스페이스에 속합니다.
  • 프로젝트는 하나의 제품입니다. 웹 앱일 수도 있고 파트너 포털일 수도 있습니다. 한 워크스페이스에 여러 프로젝트를 둘 수 있습니다.
  • 환경은 실행 중인 프로젝트의 사본 하나로, 보통 개발과 프로덕션이 있습니다. 사용자, 애플리케이션, 키, 설정은 모두 환경 안에 있습니다.

워크스페이스 · Acme Ltd

프로젝트 · 웹

  • development · wise-otter-42
  • production · acme

프로젝트 · 파트너 포털

  • development · calm-heron-17
  • production · acme-partners
각 환경은 독립된 발급자이며, 자체 사용자와 키, Lobby를 갖습니다.

환경끼리는 중요한 것을 하나도 공유하지 않습니다. 각 환경에는 자체 Postgres 스키마, 자체 서명 키, 그리고 자체 데이터 키로 봉인된 자체 시크릿이 있습니다. 개발 환경에서 가입한 사람은 프로덕션 환경에 존재하지 않으며, 한 환경의 토큰은 절대 다른 환경의 키로 검증되지 않습니다.

워크스페이스 관리자는 프로젝트의 ‘개요’ 맨 아래에서 프로젝트 이름을 입력한 뒤 프로젝트를 삭제할 수 있습니다. 프로젝트 안의 모든 환경이 한꺼번에 사라집니다. 환경의 사용자, 애플리케이션, 키, 설정, 그리고 환경이 발급한 모든 세션과 토큰도 함께 사라집니다. 프로젝트의 주소는 더 이상 응답하지 않으며 다시는 배정되지 않으므로, 아직 그 주소를 신뢰하는 앱이 다른 사람의 프로젝트에 속을 일이 없습니다.

발급자

각 환경은 테넌트 도메인 위의 자체 호스트에 있는 독립된 OpenID Connect 발급자(issuer)입니다.

발급자
https://<handle>.usherid.com
  • 프로덕션 환경은 직접 정한 핸들을 사용합니다. 핸들은 회사 이름처럼 영문 소문자, 숫자, 연속되지 않은 하이픈으로 된 3~32자입니다. 한 번 사용된 핸들은 다시는 배정되지 않습니다.
  • 개발 환경에는 wise-otter-42처럼 누구도 브랜드로 착각하지 않을 무작위 핸들이 주어집니다.

발급자는 환경을 만들 때 정해지며 바꿀 수 없습니다. 발급자가 서명하는 모든 토큰의 iss에 그 이름이 들어가고, 발급자를 신뢰하는 모든 앱이 그 값을 확인하기 때문입니다.

테넌트 도메인은 Usher 자체 도메인(usheridentity.com)과 다른 등록 가능 도메인입니다. 따라서 고객의 로그인 페이지는 절대 Usher Console과 동일 사이트(same-site)가 되지 않으며, 쿠키는 호스트 전용입니다. 브라우저는 한 환경의 쿠키를 그 환경에만 보냅니다.

Lobby

Lobby는 각 환경이 발급자 주소에서 호스팅하는 로그인 페이지입니다. 앱이 사람들을 이곳으로 보내면, Lobby가 로그인을 처리하고 다시 앱으로 돌려보냅니다.

  • 사용자가 이동할 앱의 이름을 ‘(으)로 이동’ 칩에 항상 보여 줍니다.
  • 환경에서 허용한 방법만 제공합니다. 패스키, 이메일 코드, 매직 링크, 소셜 계정(Google, GitHub, Microsoft, Apple), 암호 중에서 고를 수 있습니다.
  • 2차 인증을 필수로 요구할 수 있습니다. 인증 앱(백업 코드 포함) 또는 패스키를 사용합니다.
  • 누구나 가입하도록 열어 둘 수도 있고, 주소와 도메인으로 만든 게스트 리스트로 제한할 수도 있습니다.

Lobby는 어느 제품에서 왔든 똑같은 모습입니다. 이는 의도된 것입니다. 사람들은 진짜 Lobby가 어떻게 생겼는지 익히고, 진짜가 아닌 페이지를 알아챌 수 있습니다.

Usher 계정

대부분의 환경은 자체 사용자를 갖습니다. Usher 계정은 다릅니다. 계정 하나로 ‘Usher로 계속하기’를 제공하는 모든 앱에 로그인할 수 있습니다. 사용자는 account.usheridentity.com에서 자신의 계정을 관리합니다.

토큰과 유효 기간

토큰기본값설정 가능 범위용도
인가 코드5분고정토큰으로 한 번 교환합니다. 일회용입니다.
ID 토큰10분1~60분누가 로그인했는지 앱에 알려 줍니다. API 호출용이 아닙니다.
액세스 토큰10분1~60분API로 보내며, API가 이를 검증합니다.
리프레시 토큰30일1~90일새 액세스 토큰을 받습니다. 사용할 때마다 교체됩니다. offline_access가 필요합니다.
머신 액세스 토큰15분1~60분client_credentials용입니다. 사람 없이 동작하는 서버를 위한 토큰입니다.
이메일 코드, 매직 링크10분고정한 번의 로그인에 사용합니다. 코드는 세 번까지 시도할 수 있습니다.

Lobby의 세션에도 유효 기간이 있습니다. 세션은 7일 동안 사용하지 않으면 끝나고(130일), 사용 여부와 관계없이 총 30일이 지나면 끝납니다(190일). 이메일 주소처럼 민감한 정보를 변경하려면 최근 10분 이내에 로그인한 상태여야 합니다.

서명 키

토큰은 기본적으로 RS256으로 서명되며, 환경에 따라 ES256 또는 EdDSA를 대신 사용할 수 있습니다. 공개 키는 환경의 jwks_uri에 게시되므로, 라이브러리가 이를 가져오고 키가 교체되면 새 키를 받아 씁니다.

범위(scope)

범위앱이 받는 정보
openid필수. 사용자의 sub이 담긴 ID 토큰.
profile이름과 사진.
email이메일 주소와 그 주소의 확인 여부.
offline_access로그인 상태를 유지하기 위한 리프레시 토큰.