Chrome이 FedCM에서 자동 재인증을 지원함
Federated Credential Management API (FedCM)는 개인 정보 보호 ID 제휴를 위한 웹 API입니다. ID 제휴를 사용하면 RP (신뢰 당사자)가 IdP (ID 공급자)를 사용하여 새 사용자 이름과 비밀번호를 요구하지 않고 사용자에게 계정을 제공할 수 있습니다.
FedCM을 사용하면 브라우저가 RP와 IdP가 정보를 교환하는 컨텍스트를 이해할 수 있습니다. 사용자에게 공유되는 정보 및 권한 수준을 알리고 의도치 않은 악용을 방지합니다. FedCM은 Chrome 버전 108부터 사용할 수 있습니다.
Chrome 115에서는 FedCM이 자동 재인증을 지원합니다. 이 기능은 사용자 환경을 개선하고 초기 동의 후 RP에 대한 재인증을 더 간소화합니다.
자동 재인증
현재 사용자가 FedCM API를 통해 RP에서 IdP로 제휴 계정을 만든 후 다음에 웹사이트를 방문할 때는 사용자 인터페이스에서 동일한 단계를 거쳐야 합니다. 즉, 사용자가 명시적으로 직접 다시 확인하여 다시 인증하고 로그인 절차를 진행해야 합니다.
명시적 사용자 환경은 사용자가 추적을 방지하기 위해 제휴 계정을 만들기 전에 적절하지만 (FedCM의 주요 목표 중 하나임) 사용자가 한 번 거친 후에는 불필요하게 번거로워집니다. 사용자가 RP와 IdP 간의 통신을 허용하기 위한 권한을 부여한 후에는 이미 이전에 확인한 사항에 대해 또다시 명시적 사용자 확인을 시행하는 데 어떠한 개인 정보 보호 또는 보안 이점도 없습니다. 이에 따라 RP가 재방문 사용자를 위해 선택할 수 있는 보다 간소화된 UX를 도입하고 있습니다.
FedCM 자동 재인증(줄여서 '자동 재인증')을 사용하면 사용자가 FedCM을 사용하여 초기 인증 후 다시 방문할 때 자동으로 재인증할 수 있습니다. 여기서 '초기 인증'은 사용자가 동일한 브라우저 인스턴스에서 FedCM 로그인 대화상자의 '계정으로 계속...' 버튼을 처음으로 탭하여 계정을 만들거나 RP 웹사이트에 로그인하는 것을 의미합니다.

자동 재인증 옵션 선택
더 나은 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
});
mediation
는 인증 관리 API의 속성이며 PasswordCredential 및 FederatedCredential과 동일한 방식으로 작동하며 PublicKeyCredential에서도 부분적으로 지원됩니다. 이 속성은 다음 네 가지 값을 허용합니다.
'required'
: 항상 미디에이션이 필요합니다(예: UI에서 '계속' 버튼 클릭). 사용자가 인증해야 할 때마다 명시적으로 권한을 부여해야 하는 경우 이 옵션을 선택합니다.'optional'
(기본값): 가능한 경우 자동 재인증을 실행하고 가능하지 않은 경우 미디에이션이 필요합니다. 로그인 페이지에서 이 옵션을 선택하는 것이 좋습니다.'silent'
: 가능하면 자동 재인증을 실행하고, 가능하지 않으면 미디에이션 없이 자동으로 실패합니다. 전용 로그인 페이지가 아닌 페이지에서 사용자를 로그인 상태로 유지하려는 경우 이 옵션을 선택하는 것이 좋습니다(예: 배송 웹사이트의 상품 페이지 또는 뉴스 웹사이트의 기사 페이지).'conditional'
: WebAuthn에 사용되며 현재 FedCM에는 사용할 수 없습니다.
이 호출을 사용하면 다음 조건에서 자동 재인증이 실행됩니다.
- FedCM을 사용할 수 있습니다. 예를 들어 사용자가 설정에서 전체적으로 또는 RP에 대해 FedCM을 사용 중지하지 않았습니다.
- 사용자가 이 브라우저에서 웹사이트에 로그인할 때 FedCM API와 함께 하나의 계정만 사용했습니다.
- 사용자가 해당 계정으로 IdP에 로그인합니다.
- 지난 10분 이내에 자동 재인증이 이루어지지 않았습니다.
- RP가 이전 로그인 후
navigator.credentials.preventSilentAccess()
를 호출하지 않았습니다.
위의 조건이 충족되면 FedCM navigator.credentials.get()
가 호출되는 즉시 사용자를 자동으로 재인증하려는 시도가 시작됩니다.
preventSilentAccess()
로 미디에이션 시행
사용자가 로그아웃한 직후에 자동으로 재인증하면 사용자 환경이 좋지 않을 수 있습니다. 이러한 동작을 방지하기 위해 FedCM에는 자동 재인증 후 10분의 대기 시간이 있습니다. 즉, 사용자가 10분 이내에 다시 로그인하지 않는 한 자동 재인증은 10분마다 최대 한 번씩 발생합니다. RP는 navigator.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의 노아 사무엘 프란츠