FedCM에서 자동 재인증 지원

Chrome은 FedCM에서 자동 재인증을 지원합니다.

Federated Credential Management API (FedCM)는 개인 정보 보호 ID 제휴를 위한 웹 API입니다. ID 제휴를 사용하면 RP (신뢰 당사자)가 IdP (ID 공급업체)를 통해 새로운 사용자 이름과 비밀번호 없이도 사용자에게 계정을 제공합니다.

FedCM을 사용하면 브라우저가 RP 및 IdP가 정보를 교환하는 컨텍스트를 파악할 수 있습니다. 공유 중인 정보와 권한 수준에 관해 사용자에게 알리고 의도치 않은 악용을 방지합니다. FedCM은 버전 108부터 Chrome에서 사용할 수 있었습니다.

Chrome 115에서 FedCM은 자동 재인증을 지원하므로 사용자 환경을 개선하고 초기 동의 후 RP에 대한 더 간소화된 재인증을 지원합니다.

자동 재인증

현재는 사용자가 FedCM API를 통해 IdP를 사용하여 RP의 제휴 계정을 만든 후 다음에 웹사이트를 방문할 때 사용자 인터페이스에서 동일한 단계를 거쳐야 합니다. 즉, 사용자가 재인증하고 로그인 과정을 진행하려면 명시적으로 그리고 수동으로 재확인해야 합니다.

명시적인 사용자 환경은 사용자가 추적 (FedCM의 주요 목표 중 하나)을 방지하기 위해 제휴 계정을 만들기 전에 합리적이지만 사용자가 RP와 IdP 간의 통신을 허용하는 권한을 부여한 후에는 사용자가 이전에 확인한 다른 명시적 사용자 확인을 시행해도 개인 정보 보호 또는 보안상의 이점이 없으므로 불필요하게 번거로울 수 있습니다. 이러한 이유로 Google에서는 RP가 재사용자를 위해 선택할 수 있는 더 간소화된 UX를 도입하고 있습니다.

FedCM 자동 재인증(줄여서 'auto-reauthn')을 사용하면 사용자가 FedCM을 사용한 초기 인증 후 돌아올 때 자동으로 재인증할 수 있습니다. 여기서 '초기 인증'은 사용자가 동일한 브라우저 인스턴스에서 처음으로 FedCM 로그인 대화상자의 '다음으로 계속...' 버튼을 탭하여 계정을 만들거나 RP의 웹사이트에 로그인한다는 의미입니다.

사용자가 계정을 만들거나 인증하기 위해 탭하는 대화상자.
사용자가 계정을 만들거나 인증하기 위해 탭하는 대화상자

자동 재인증 옵션 선택

Google에서는 더 나은 UX를 제공하고 사양에 맞추기 위해 자동 재인증을 도입하지만, 코드 변경 없이 기본 사용자 환경은 달라집니다. 자동 재인증을 사용할 수 있으면 개발자가 navigator.credentials.get()에 제공하는 mediation 옵션에서 선택하는 옵션에 따라 브라우저 동작이 변경됩니다.

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/fedcm.json",
      clientId: "1234",
    }],
  },
  mediation: 'optional', // this is the default
});

mediationCredential Management API의 속성이며 PasswordCredentialFederatedCredential동일한 방식으로 작동하며 PublicKeyCredential에서도 부분적으로 지원됩니다. 이 속성에는 다음 4가지 값을 사용할 수 있습니다.

  • 'required': 작업을 진행하려면 항상 미디에이션이 필요합니다(예: UI에서 '계속' 버튼 클릭). 사용자가 인증이 필요할 때마다 명시적으로 권한을 부여해야 하는 경우 이 옵션을 선택하세요.
  • 'optional'(기본값): 가능한 경우 자동 재인증되며, 그렇지 않은 경우 미디에이션이 필요합니다. 로그인 페이지에서 이 옵션을 선택하는 것이 좋습니다.
  • 'silent': 가능한 경우 자동으로 재인증하며, 그러지 않으면 미디에이션 없이도 자동으로 실패합니다. 전용 로그인 페이지는 아니지만 사용자의 로그인 상태를 유지하려는 페이지(예: 배송 웹사이트의 상품 페이지 또는 뉴스 웹사이트의 기사 페이지)에서 이 옵션을 선택하는 것이 좋습니다.
  • 'conditional': WebAuthn에 사용되며 현재 FedCM에서는 사용할 수 없습니다.

이 호출을 사용하면 다음 조건에서 자동 재인증이 수행됩니다.

  • FedCM을 사용할 수 있습니다. 예를 들어 사용자가 설정에서 전체적으로 또는 RP에 대해 FedCM을 사용 중지하지 않았습니다.
  • 사용자가 FedCM API로 하나의 계정만 사용하여 이 브라우저에서 웹사이트에 로그인했습니다.
  • 사용자가 해당 계정으로 IdP에 로그인했습니다.
  • 최근 10분 내에 자동 재인증이 이루어지지 않았습니다.
  • RP가 이전 로그인 후 navigator.credentials.preventSilentAccess()를 호출하지 않았습니다.

위 조건이 충족되면 FedCM navigator.credentials.get()가 호출되는 즉시 사용자 자동 재인증 시도가 시작됩니다.

FedCM을 통해 자동으로 재인증하는 사용자입니다.

preventSilentAccess()에서 미디에이션 시행

로그아웃 직후 사용자를 자동으로 다시 인증한다고 해서 사용자 경험이 크게 향상되지는 않습니다. 이러한 이유로 FedCM은 이러한 동작을 방지하기 위해 자동 재인증 후 10분의 대기 기간을 제공합니다. 즉, 사용자가 10분 이내에 다시 로그인하지 않는 한 자동 재인증은 10분마다 최대 한 번 실행됩니다. RP는 navgator.credentials.preventSilentAccess()를 호출하여 사용자가 로그아웃 버튼을 클릭하는 등의 방법으로 RP에서 명시적으로 로그아웃할 때 자동 재인증을 사용 중지하도록 브라우저에 명시적으로 요청해야 합니다.

function signout() {
  navigator.credentials.preventSilentAccess();
  location.href = '/signout';
}

사용자는 설정에서 자동 재인증을 선택 해제할 수 있습니다.

사용자는 설정 메뉴에서 자동 재인증을 선택 해제할 수 있습니다.

  • 데스크톱 Chrome에서 chrome://password-manager/settings > 자동 로그인으로 이동합니다.
  • Android Chrome에서 설정 > 비밀번호 관리자를 열고 오른쪽 상단의 톱니바퀴 아이콘을 탭한 다음 자동 로그인을 탭합니다.

전환 버튼을 사용 중지하면 사용자는 자동 재인증 동작을 모두 선택 해제할 수 있습니다. 이 설정은 사용자가 Chrome 인스턴스에서 Google 계정에 로그인되어 있고 동기화가 사용 설정된 경우 기기 간에 저장되고 동기화됩니다.

의견 공유

FedCM을 테스트하는 경우 crbug.com'Blink>Identity>FedCM' 구성요소를 통해 의견이나 발생한 문제를 공유할 수 있습니다.

사진: 노아 사무엘 프란츠(Unsplash 제공)