AD FS OpenID 커넥트/OAuth 개념

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

최신 인증 행위자

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

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

Diagram of the modern authentication actors.

애플리케이션 형식

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

애플리케이션 그룹

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

보안 토큰

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

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

새로 고침 토큰 수명

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

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

범위

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

  • aza- 브로커 클라이언트에 OAuth 2.0 프로토콜 확장을 사용하고 범위 매개 변수에 범위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 인증 흐름

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

Diagram of the AD FS authentication flow.

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

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

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

    리소스 또는 범위 매개 변수를 사용하여 리소스를 전달하지 않으면 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 경우 정의된 클레임 규칙에 따라 액세스 토큰에 클레임을 포함하도록 ID 토큰을 사용자 지정합니다.

  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_mode 가 다음과 같이 설정됩니다. form_post
  • 신뢰 당사자 식별자(웹 API 식별자)는 클라이언트 식별자와 동일합니다.

Diagram of AD FS customize token option one.

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

  • response_mode 가 다음과 같이 설정됩니다. form_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"
    

Diagram of AD FS customize token option two.

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

단일 로그아웃

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

AD FS 엔드포인트

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