다음을 통해 공유


AD FS OpenID Connect/OAuth 개념

AD FS(Active Directory Federation Services) 2016 이상에 적용됨

최신 인증 행위자

행위자 설명
최종 사용자 리소스에 액세스하는 보안 주체(사용자, 애플리케이션, 서비스 및 그룹).
클라이언트 클라이언트 ID로 식별되는 웹 애플리케이션. 클라이언트는 일반적으로 최종 사용자가 상호 작용하는 당사자이며 클라이언트는 권한 부여 서버에 토큰을 요청합니다.
권한 부여 서버/ID 공급자(IdP) 사용자의 AD FS 서버. 이것은 조직의 디렉터리에 존재하는 보안 주체의 ID를 확인하는 역할을 담당합니다. 보안 주체가 성공적으로 인증되면 보안 토큰(전달자 액세스 토큰, ID 토큰 및 새로 고침 토큰)을 발급합니다.
리소스 서버/리소스 공급자/신뢰 당사자 리소스나 데이터가 있는 위치. 이것은 클라이언트를 안전하게 인증하고 권한을 부여할 권한 부여 서버를 신뢰하고, 전달자 액세스 토큰을 사용하여 리소스에 대한 액세스 권한을 부여할 수 있도록 합니다.

다음 다이어그램은 행위자 사이의 가장 기본적인 관계를 제공합니다.

최신 인증 행위자 다이어그램.

애플리케이션 형식

응용 프로그램 유형 설명 역할
네이티브 애플리케이션 공용 클라이언트로 불리기도 합니다. 그 대상은 PC 또는 디바이스에서 실행되고 사용자가 상호 작용하는 클라이언트 앱입니다. 리소스에 대 한 사용자 액세스 권한 부여 서버 (AD FS)의 토큰을 요청 합니다. 토큰을 HTTP 헤더로 사용하여 보호되는 리소스에 HTTP 요청을 보냅니다.
서버 애플리케이션(웹 앱). 서버에서 실행되며 브라우저를 통해 사용자가 액세스할 수 있는 웹 애플리케이션. 자체 클라이언트 비밀이나 자격 증명을 유지 관리할 수 있기 때문에 기밀 클라이언트라고도합니다. 리소스에 대 한 사용자 액세스 권한 부여 서버 (AD FS)의 토큰을 요청 합니다. 토큰을 요청하려면 클라이언트(웹앱)가 해당 비밀을 사용하여 인증해야 합니다.
웹 API 사용자가 액세스하는 최종 리소스. 신뢰 당사자의 새로운 표현으로 간주합니다. 클라이언트가 가져온 전달자 액세스 토큰을 사용합니다.

애플리케이션 그룹

애플리케이션 그룹을 AD FS로 구성된 모든 네이티브나 웹앱 OAuth 클라이언트 또는 웹 API 리소스와 연결해야 합니다. 애플리케이션 그룹 클라이언트가 동일 그룹의 리소스에 액세스할 수 있게 구성합니다. 애플리케이션 그룹에는 여러 클라이언트와 리소스가 있을 수 있습니다.

보안 토큰

최신 인증은 다음 유형의 토큰을 사용합니다.

  • id_token: AD FS(권한 부여 서버)에서 발급하고 클라이언트가 사용하는 JWT 토큰. ID 토큰의 클레임에는 클라이언트가 사용할 수 있도록 사용자에 관한 정보가 포함됩니다.
  • access_token: AD FS(권한 부여 서버)에서 발급하고 리소스에서 사용하려는 JWT 토큰. 이 토큰의 'aud' 또는 대상 그룹 클레임은 리소스 또는 웹 API의 식별자와 일치해야 합니다.
  • refresh_token: 클라이언트가 id_token을 새로 고쳐야 할 때 사용하여 토큰을 발급하도록 AD FS에서 발급. 이 토큰은 클라이언트에 대해 불투명하며 AD FS에서만 사용합니다.

새로 고침 토큰 수명

  • 단순 로그온, KMSI 없음, 등록되지 않은 디바이스: AD FS가 SsoLifetimeDeviceUsageWindowInDays를 적용합니다. 첫 번째 새로 고침 토큰에는 lifetime=DeviceUsageWindowInDays 또는 SsoLifetime가 있는데 이는 기반하는 필드가 하위이지만 더 이상 새로 고침 토큰이 발급되지 않습니다.
  • KMSI 로그온, AD FS conf의 EnableKmsi=true, 매개 변수로 전달된 kmsi=true: AD FS가 KmsiLifetimeMinsDeviceUsageWindowInDays와 함께 적용합니다. 첫 번째 새로 고침 토큰에 lifetime=DeviceUsageWindowInDays가 있고 각 후속 grant_type=refresh_token 요청은 새 새로 고침 토큰을 가져옵니다. 이 프로세스는 네이티브 또는 기밀 클라이언트와 디바이스 인증에서만 발생합니다.
  • 등록된 디바이스, 디바이스 인증: AD FS에서 KMSI와 유사한 PersistentSsoLifetimeMinsDeviceUsageWindowInDays를 사용합니다. 네이티브와 기밀 클라이언트 모두 디바이스 인증에 따라 새 새로 고침 토큰을 가져와야 합니다.

자세한 내용은 AD FS Single Sign-On 설명서를 참조하세요.

범위

AD FS에서 리소스를 등록할 때 AD FS가 특정 작업을 수행할 수 있도록 범위를 구성할 수 있습니다. 범위를 구성하는 것 외에 AD FS가 작업을 수행하도록 요청의 범위 값도 보내야 합니다. 예를 들어, 관리자는 리소스 등록 시 범위를 openid로 구성하고, 애플리케이션(클라이언트)은 AD FS에 대한 인증 요청에서 ID 토큰을 발급하도록 scope = openid를 보내야 합니다. 다음은 AD FS에서 사용할 수 있는 범위에 관한 세부 정보입니다.

  • aza - 브로커 클라이언트에 OAuth 2.0 프로토콜 확장을 사용하고, scope 매개 변수에 범위 aza가 포함된 경우에는 서버에서 새 기본 새로 고침 토큰을 발급합니다. 응답의 refresh_token 필드에 토큰을 설정하고 적용된 경우 refresh_token_expires_in field를 새 기본 새로 고침 토큰의 수명으로 설정합니다.
  • openid - 애플리케이션에서 openid 연결 인증 프로토콜의 사용을 요청할 수 있습니다.
  • logon_cert - 애플리케이션에서 인증된 사용자를 대화형으로 로그온하는 데 사용할 수 있는 로그인 인증서를 요청할 수 있습니다. AD FS 서버는 응답에서 access_token 매개 변수를 누락시키고, 그 대신, base64로 인코딩된 CMS 인증서 체인 또는 CMC 전체 PKI 응답을 제공합니다. 자세한 내용은 MS-OAPX: OAuth 2.0 프로토콜 확장을 참조하세요.
  • user_impersonation - AD FS에서 On-Behalf-Of 액세스 토큰을 요청합니다. 이 범위를 사용하는 방법에 관한 자세한 내용은 AD FS 2016에서 OAuth를 사용하는 OBO(On-Behalf-Of)를 통해 다중 계층 애플리케이션 빌드를 참조하세요.
  • allatclaims – 애플리케이션에서 ID 토큰에도 추가할 액세스 토큰의 클레임을 요청할 수 있습니다.
  • vpn_cert - 애플리케이션에서 EAP-TLS 인증을 사용하여 VPN을 연결하는 VPN 인증서를 요청할 수 있습니다. 더 이상 이 기능은 지원되지 않습니다.
  • email- 애플리케이션에서 로그인한 사용자의 이메일 클레임을 요청할 수 있습니다.
  • profile - 애플리케이션에서 로그인한 사용자의 프로필 관련 클레임을 요청할 수 있습니다.

클레임

AD FS에서 발급한 보안 토큰(액세스 및 ID 토큰)에는 인증된 주체에 관한 정보의 클레임이나 어설션이 포함됩니다. 애플리케이션은 다음을 포함한 다양한 작업에 대한 클레임을 사용할 수 있습니다.

  • 토큰 유효성 검사
  • 주체의 디렉터리 테넌트 식별
  • 사용자 정보 표시
  • 주체의 권한 부여 확인

임의의 지정된 보안 토큰에 있는 클레임은 토큰 형식, 사용자 인증에 사용되는 자격 증명 유형, 애플리케이션 구성 등에 따라 다릅니다.

상위 AD FS 인증 흐름

상위 흐름의 다이어그램은 다음과 같습니다.

AD FS 인증 흐름 다이어그램.

  1. AD FS가 클라이언트에서 인증 요청을 받습니다.

  2. AD FS가 클라이언트 및 리소스 등록 시 AD FS에서 가져온 클라이언트 ID로 인증 요청에서 클라이언트 ID의 유효성을 검사합니다. 기밀 클라이언트를 사용하는 경우에는 AD FS가 인증 요청에 제공된 클라이언트 비밀의 유효성도 검사합니다. AD FS가 클라이언트의 리디렉션 URI의 유효성도 검사합니다.

  3. AD FS가 인증 요청에서 전달된 리소스 매개 변수를 통해 클라이언트가 액세스하려는 리소스를 식별합니다. MSAL 클라이언트 라이브러리를 사용하는 경우에는 리소스 매개 변수가 전송되지 않습니다. 그 대신 범위 매개변수 scope = [resource url]/[scope values, for example, openid]의 일부로 리소스 URL이 전송됩니다.

    리소스나 범위 매개 변수를 사용하여 리소스를 전달하지 않는 경우 AD FS는 MFA, 발급 또는 권한 부여 정책 같은 정책을 구성할 수 없는 기본 리소스 urn:microsoft:userinfo를 사용합니다.

  4. 그 다음에 AD FS가 리소스에 액세스할 수 있는 권한이 클라이언트에 있는지 여부를 확인합니다. AD FS는 인증 요청에서 전달된 범위가 리소스를 등록할 때 구성된 범위와 일치하는지도 확인합니다. 클라이언트에게 권한이 없거나 인증 요청에서 올바른 범위가 전송되지 않으면 인증 흐름이 종료됩니다.

  5. 사용 권한과 범위의 유효성이 검사되면 AD FS는 구성된 인증 방법을 사용하여 사용자를 인증합니다.

  6. 리소스 정책이나 전역 인증 정책에 따라 다른 인증 방법이 필요한 경우 AD FS는 추가 인증을 트리거합니다.

  7. AD FS는 Microsoft Entra 다단계 인증 또는 타사 다단계 인증을 사용하여 인증을 수행합니다.

  8. 사용자가 인증되면 AD FS는 클레임 규칙을 적용합니다. 클레임 규칙에 따라 보안 토큰의 일부로 리소스에 전송되는 클레임이 결정됩니다. AD FS는 사용자가 리소스에 액세스하는 데 필요한 조건을 충족하는지 확인하는 액세스 제어 정책도 적용합니다.

  9. 그 다음에 AD FS는 액세스를 생성하고 토큰을 새로 고칩니다. AD FS가 ID 토큰도 생성합니다.

  10. AD FS가 인증 요청을 받습니다.

  11. 인증 요청에 scope = allatclaims가 포함된 경우 정의된 클레임 규칙에 따라 액세스 토큰의 클레임을 포함하도록 를 사용자 지정합니다.

  12. 필요한 토큰이 생성되고 사용자 지정이 되면 AD FS가 클라이언트에 응답하고 토큰을 포함시킵니다. ID 토큰 응답은 인증 요청에 scope = openid가 포함되는 경우에만 응답에 포함됩니다. 클라이언트는 토큰 엔드포인트를 사용하여 인증 후 언제나 ID 토큰을 가져올 수 있습니다.

라이브러리 유형

AD FS에 다음 두 유형의 라이브러리를 사용합니다.

  • 클라이언트 라이브러리: 네이티브 클라이언트와 서버 앱은 클라이언트 라이브러리를 사용하여 웹 API 같은 리소스를 호출하기 위한 액세스 토큰을 가져옵니다. MSAL(Microsoft 인증 라이브러리)은 AD FS 2019를 사용하는 경우에 권장되는 최신 클라이언트 라이브러리입니다.

  • 서버 미들웨어 라이브러리: 웹앱은 서버 미들웨어 라이브러리를 사용자 로그인에 사용합니다. 웹 API는 서버 미들웨어 라이브러리를 사용하여 네이티브 클라이언트나 다른 서버에서 보낸 토큰의 유효성을 검사합니다. OWIN(Open Web Interface for .NET)이 권장되는 미들웨어 라이브러리입니다.

ID 토큰 사용자 지정(ID 토큰의 추가 클레임)

특정 시나리오에서는 기능에 도움이 되도록 웹앱 클라이언트에서 ID 토큰에 추가 클레임을 요구할 수 있습니다. 다음 옵션 중에서 하나를 사용하여 ID 토큰에 추가 클레임을 설정합니다.

옵션 1: 공용 클라이언트가 있는데 액세스하려는 리소스가 웹앱에 없는 경우 이 옵션을 사용합니다. 이 옵션에는 다음이 필요합니다.

  • response_modeform_post로 설정됨
  • 신뢰 당사자 식별자(웹 API 식별자)가 클라이언트 식별자와 동일

AD FS 사용자 지정 토큰 옵션 1의 다이어그램.

옵션 2: 액세스하려는 리소스가 웹앱에 있고 ID 토큰을 통해 추가 클레임을 전달해야 하는 경우 이 옵션을 사용합니다. 공용과 기밀 클라이언트를 모두 사용할 수 있습니다. 이 옵션에는 다음이 필요합니다.

  • response_modeform_post로 설정됨

  • KB4019472가 AD FS 서버에 설치됩니다.

  • 범위 allatclaims는 클라이언트 - RP 쌍에 할당됩니다. Grant-ADFSApplicationPermission를 사용하여 범위를 할당할 수 있습니다. 이미 한 번 부여된 경우에 Set-AdfsApplicationPermission를 사용합니다. 다음 예제에는 PowerShell cmdlet이 표시되어 있습니다.

    Grant-AdfsApplicationPermission -ClientRoleIdentifier "https://my/privateclient" -ServerRoleIdentifier "https://rp/fedpassive" -ScopeNames "allatclaims","openid"
    

AD FS 사용자 지정 토큰 옵션 2의 다이어그램.

사용자 지정 ID 토큰을 가져오도록 AD FS에서 웹앱을 구성하는 방법을 더 잘 이해하려면 AD FS 2016 이상의 사용자 지정 ID 토큰을 참조하세요.

단일 로그아웃

단일 로그아웃은 세션 ID를 사용하는 클라이언트 세션을 모두 종료합니다. AD FS 2016 이상은 OpenID Connect/OAuth에 단일 로그아웃을 지원합니다. 자세한 내용은 AD FS를 사용한 OpenID Connect의 단일 로그아웃을 참조하세요.

AD FS 엔드포인트

AD FS 엔드포인트 설명
/authorize AD FS가 액세스 토큰을 가져오는 데 사용할 수 있는 권한 부여 코드를 반환합니다.
/token AD FS가 웹 API에서처럼 리소스에 액세스하는 데 사용할 수 있는 액세스 토큰을 반환합니다.
/userinfo AD FS가 주체 클레임을 반환합니다.
/devicecode AD FS가 디바이스 코드와 사용자 코드를 반환합니다.
/logout AD FS가 사용자를 로그아웃합니다.
/keys 응답에 서명하는 데 사용되는 AD FS 공개 키.
/.well-known/openid-configuration AD FS가 OAuth/OpenID Connect 메타데이터를 반환합니다.