FedCM 업데이트: API 연결 해제 및 두 개의 업데이트

Chrome 122부터 Federated Credential을 위한 Disconnect API Management API (FedCM)를 사용할 수 있습니다. 이 Disconnect API를 사용하면 신뢰 당사자가 사용자와 네트워크 간의 연결을 해제할 수 있습니다. ID 공급업체의 계정에만 액세스할 수 있습니다. 또한 FedCM의 동일 사이트 처리에 대한 몇 가지 업데이트입니다.

API 연결 해제

사용자가 신뢰 당사자 (RP, ID 공급자)를 통해 ID 제휴를 통해 공급자 (IdP - 인증 및 계정 정보를 제공하는 서비스) 일반적으로 해당 서버에 연결을 기록합니다. 저장된 연결을 사용하면 IdP는 사용자가 로그인한 RP를 추적하고 환경을 최적화할 수 있습니다 예를 들어 사용자가 나중에 RP로 돌아오면 IdP가 있는 사용자 계정은 자동 재인증, 재인증과 같은 기능을 사용할 수 있습니다. 사용된 계정을 보여주는 맞춤 버튼이 표시됩니다.

간혹 IdP가 RP에서 계정을 연결 해제하는 API를 제공하는 경우가 있습니다. 그러나 인증되고 IdP 쿠키가 필요합니다. 현실 세계 서드 파티 쿠키가 없으면 사용자가 RP를 방문하면 브라우저가 없는 경우 IdP에서 연결을 해제하는 RP용 API입니다. 여러 IdP가 있을 수 있기 때문에 특정 RP에 연결된 동일한 IdP의 계정에 연결할 수 있는 경우 연결 해제 흐름에는 어떤 계정이 연결 해제되고 있는지 알 수 있어야 합니다.

연결 해제 API 사용자가 브라우저의 RP에서 IdP 계정을 연결 해제할 수도 있습니다. 지정된 엔드포인트로 신호를 보내어 IdP 서버에서처럼 작동합니다. 사용자의 요구사항 Federated Credential을 사용한 ID 제휴를 통해 Management API (FedCM) 사용자와의 연결이 끊어지면 새로운 사용자로 간주됨 사용자가 다음에 IdP를 사용하여 RP에 로그인하려고 할 때

RP에서 IdP 연결 해제

사용자가 이전에 FedCM을 통해 IdP를 사용하여 RP에 로그인한 경우 관계는 브라우저에 연결된 있습니다. RP는 IdentityCredential.disconnect() 함수를 사용하세요. 이 함수는 최상위 RP 프레임입니다. RP는 사용하는 clientIdconfigURL를 전달해야 합니다. 연결 해제되어야 하는 IdP의 accountHint를 제공합니다. 계정 힌트는 연결 해제 엔드포인트가 식별할 수 있는 한 임의의 문자열이 될 수 있습니다. 이메일 주소 또는 사용자 ID와 같이 사용자의 계정 목록 엔드포인트에서 제공한 계정 ID와 일치합니다.

// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
  configURL: "https://idp.com/config.json",
  clientId: "rp123",
  accountHint: "account456"
});

IdentityCredential.disconnect()Promise을 반환합니다. 이 프라미스는 다음과 같은 이유로 예외가 인정됩니다.

  • 사용자가 FedCM을 통해 IdP를 사용하여 RP에 로그인하지 않았습니다.
  • API가 FedCM 권한 정책 없이 iframe 내에서 호출됩니다.
  • configURL이 잘못되었거나 연결 해제 엔드포인트가 누락되었습니다.
  • 콘텐츠 보안 정책 (CSP) 검사에 실패하였습니다.
  • 대기 중인 연결 해제 요청이 있습니다.
  • 사용자가 브라우저 설정에서 FedCM을 사용 중지했습니다.

IdP의 연결 해제 엔드포인트에서 연결되면 RP와 IdP의 연결이 프라미스가 해결됩니다. 연결 해제되는 사용자 계정은 연결 해제에 대한 응답에 지정된 엔드포인트가 있습니다.

IdP 구성 파일 설정

Disconnect API를 지원하려면 IdP에서 연결 해제를 지원해야 합니다. 엔드포인트를 IdP에 추가하고 disconnect_endpoint 속성 및 경로를 제공합니다. 구성 파일을 참조하세요.

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

연결 해제 엔드포인트에서 계정 연결 해제

IdentityCredential.disconnect()를 호출하면 브라우저에서 쿠키 및 콘텐츠 유형이 포함된 POST 요청 application/x-www-form-urlencoded를 다음 정보를 참조하세요.

속성 설명
account_hint IdP 계정에 대한 힌트입니다.
client_id RP의 클라이언트 식별자입니다.
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

IdP 서버는 요청을 수신한 즉시 다음을 실행해야 합니다.

  1. CORS (Cross-Origin Resource)로 요청에 응답 공유)를 선택합니다.
  2. 요청에 Sec-Fetch-Dest: webidentity HTTP 헤더가 포함되어 있는지 확인합니다.
  3. Origin 헤더를 client_id에서 결정한 RP 출처와 일치시킵니다. 일치하지 않으면 거부합니다.
  4. account_hint와 일치하는 계정을 찾습니다.
  5. RP의 연결된 계정 목록에서 사용자 계정을 연결 해제합니다.
  6. 식별된 사용자의 account_id를 JSON 형식으로 브라우저에 응답합니다. 형식으로 입력합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.

응답 JSON 페이로드의 예시는 다음과 같습니다.

{
  "account_id": "account456"
}

IdP에서 브라우저가 대신 RP에서 계정 ID와 일치하지 않는 문자열을 전달합니다(예: "*").

이제 RP와 IdP가 동일한 사이트인 경우 /.well-known/web-identity 확인을 건너뜁니다.

FedCM 시스템을 개발할 때 테스트 또는 스테이징 RP 서버 도메인은 하위 도메인만 만들 수 있습니다 예를 들어 프로덕션 IdP 서버는 idp.example에 있으며 스테이징 RP 서버와 스테이징 IdP 서버 모두 staging.idp.example에 있습니다. 하지만 잘 알려진 파일은 IdP 서버의 eTLD+1 루트에 있는 경우 idp.example/.well-known/web-identity이며 프로덕션 서버입니다. 이후 개발자가 파일을 프로덕션에 배치하는 것이 로 인해 FedCM을 테스트할 수 없습니다.

Chrome 122부터 RP 도메인과 IdP 도메인이 동일한 경우 Chrome 잘 알려진 파일 검사를 건너뜁니다. 이렇게 하면 개발자가 만들 수 있습니다

이제 하위 리소스가 동일 사이트 로그인 상태를 설정할 수 있음

이전에는 Chrome에서 로그인 설정만 허용했습니다. 상태( 예를 들어 Set-Login: logged-in 헤더 사용)이 동일 출처 첫 번째 레이어가 있습니다. 이로 인해 동일 사이트 fetch()님이 로그인 상태 설정을 요청합니다.

예를 들어 사용자가 사용자 이름을 입력하고 비밀번호는 idp.example에 있지만 사용자 인증 정보는 login.idp.example에 게시됩니다. fetch(). 로그인 상태를 사용하여 브라우저에 로그인 상태 기록 두 도메인이 교차 출처와 동일 사이트이므로 API를 사용할 수 없었습니다.

이번 변경을 통해 로그인 상태 API에 관한 요구사항이 완화되었습니다. 동일 사이트 모든 상위 요소를 포함하고 위의 예를 HTTP 헤더 (Set-Login: logged-in)를 사용한 login.idp.example의 로그인 상태

요약

이제 FedCM이 Disconnect API를 사용하여 IdP에서 RP의 연결을 해제할 수 있습니다. 사용자 환경을 개선할 수 있습니다 이렇게 하려면 RP의 IdentityCredential.disconnect() 이 함수를 사용하면 브라우저에서 IdP가 연결을 종료할 수 있도록 IdP의 연결 해제 엔드포인트로 요청을 서버 연결, 그리고 브라우저에서 연결입니다.

RP가 확인될 때 /.well-known/web-identity 검사를 건너뛰는 것으로 발표되었습니다. IdP는 테스트 목적으로 동일한 사이트입니다. 또한 로그인을 설정하여 이제 동일 사이트 IdP 하위 리소스의 HTTP 응답 헤더를 통한 상태가 있습니다.