API 권한 부여 유형을 위한 액세스 정책
액세스 정책은 OpenID Connect 및 OAuth 2.0의 API 기반 사용에 적용할 수 있습니다. 이 API
사용은 일반적으로 리소스 소유자 비밀번호 인증 정보 부여 유형(ROPC)으로 알려져 있지만,
JWT 권한 정보 기반 권한 부여 유형도 포함합니다. 이러한 권한 부여 유형은 인증 코드 및
내재적 권한 부여 유형과 달리 작동 방식에 근본적인 차이가 있습니다. 브라우저 사용자
에이전트가 존재하지 않고 /authorize 엔드포인트에 대한 요청도 이루어지지 않습니다. 이 브라우저
엔드포인트가 사용되지 않으므로 애플리케이션에 대한 액세스 정책이 다르게 평가되어야 합니다.
액세스 정책이 적용될 때 다음과 같은 기본 비즈니스 요구사항을 다룹니다.
- 사용자가 이 애플리케이션에 액세스할 수 있도록 충분히 인증했습니까?
- 인증된 사용자가 이 애플리케이션에 액세스할 수 있습니까?
- 애플리케이션에 액세스하는 데 사용되는 클라이언트 컨텍스트 또는 디바이스가 허용됩니까?
기존 브라우저 플로우에서 이러한 요구사항이 적용됩니다. 충족되지 않으면 브라우저가 MFA에 대한 프롬프트를 표시하거나 액세스를 정지시키는 사용자로 오류 페이지를 리턴합니다. API 권한 부여 유형에서는 이러한 기능이 모두 사용 가능하지는 않습니다. 따라서 다음 문제를 다루어야 합니다.
- 클라이언트 디바이스에서 컨텍스트 수신
- 다음을 포함해 MFA 인증 확인 리턴
- MFA 이행에 필요한 API.
- API에 액세스하는 방법.
policyauth 권한 부여 유형
액세스 정책을 API 전용 OAuth 2.0 플로우에 효율적으로 적용하기 위해 새 권한 부여 유형이 도입되었습니다. 이 권한 부여 유형을 사용하면 클라이언트가 인증 전에 일부 컨텍스트를 액세스 정책에 부여할 수 있습니다. 이 기능을 통해 강화된 사용자 경험을 구현할 수 있습니다. 예를 들어, 사용자가 로그인 단추를 누르면 인증 정보를 입력하도록 프롬프트가 표시되기 전에 연관된 정책에 따라 평가됩니다. 정책 요구사항을 충족하지 않는 경우 사용자는 정책 요구사항으로 인해 리소스를 인증하거나 액세스할 수 없음을 표시하는 오류 메시지를 수신합니다.
policyauth 권한 부여 유형이 사용될 때 다음 응답 중 하나가 리턴됩니다.- 거부
- 정책으로 인해 액세스를 부여할 수 없음을 표시하는 오류입니다.
- 인증 확인
- 허용 가능한 인증 요인 목록과 함께 인증 API에 액세스하는 데 사용할 수 있는 토큰이 리턴됩니다.
/token에서 MFA 인증 확인 응답
액세스 정책이 API OAuth 2.0 플로우에 적용될 때 MFA에 대한 인증 확인은 API 계약의
파트가 되어야 합니다. MFA 단계를 /authorize에 대한 요청의 파트로 수행하는 OP의
기존 방법은 사용할 수 없습니다.
MFA 인증 확인이 /token에 의해 리턴되는 경우
- 범위는
mfa_challenge이고 다른 범위는 리턴되지 않습니다. - 액세스 토큰이 발행됩니다.
- 액세스 토큰으로 필수 인증 API에 액세스할 수 있습니다. 일반 API 클라이언트 액세스 토큰이 아닌 이 액세스 토큰을 사용해야 합니다. 이 토큰은 권한 부여에서 이미 수행된 인증 요인 및 지난 조치를 추적하는 데 사용됩니다.
- 액세스 토큰은 요청에서
/introspect로active: true를 리턴합니다. MFA 인증 확인이 사용될 때, 리소스 서버를 보호하는 모든 API는/introspect에서 리턴되는scope가mfa_challenge와 같지 않다는 확인을 구현해야 합니다.
- 선택적으로 이 인증 확인
allowedFactors를 충족하기 위해 수행할 수 있는 요인의 배열이 나열됩니다.
/token에 컨텍스트 제공
/token에 대한 요청을 수행하는 API 클라이언트는 액세스 정책 평가에 사용하기 위해
올바르게 정의된 임의 컨텍스트 정보를 /token에 제공할 수 있습니다.
컨텍스트 정보의 세 가지 필수 부분을 포함해야 합니다.
sessionId- OAuth 클라이언트에서 발행하고 유지보수하는 임의 세션 ID입니다.ipAddress- OAuth 클라이언트가 사용자 에이전트와의 상호작용을 담당하므로 사용자 IP 주소를 명시적으로 제공해야 합니다.userAgent- IP 주소와 유사하게 사용자의 사용자 에이전트를 명시적으로 제공해야 합니다.
추가 매개변수를 포함할 수 있으며 이러한 값에서 컨텍스트 속성 조건을 작성할 수 있습니다.
/token참고: 에 대한 요청에 매개변수가 context 포함되지 않은 경우, 액세스 정책이 호출되지 않습니다.컨텍스트는 base64로 인코딩된 JSON 양식으로 /token에 제공됩니다. 컨텍스트에 대한
JSON 페이로드의 예는 다음과 같습니다.
{
"sessionId":"MDNjZmQ3NDM2NjFmMDc5NzVmYTJmMT",
"ipAddress":"129.42.38.10",
"userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
컨텍스트 정보는 안전한 클라이언트 인증 정보 세트를 발행한 API 클라이언트에서 제공되므로 신뢰할 수 있는 것으로 간주됩니다. 이 API 클라이언트는 비즈니스 제어를 피하는 데 사용되지 않도록 이용하는 사용자 에이전트에서 컨텍스트를 임의로 제공하지 않게 해야 합니다.
, policyAuth JWT Bearer,, ROPC 및 refresh
token등 모든 API 승인 유형에서 액세스 정책이 호출될 때마다 컨텍스트를 제공해야 합니다.
mfa_challenge 충족
/token 엔드포인트에서 리턴된 MFA 인증 확인을 충족하기 위해
인증 요인 API를 사용할 수 있습니다. 이러한 API는 첫 번째와 두 번째 요인
요구사항을 충족하는 데 사용됩니다. mfa_challenge 응답에 리턴된
액세스 토큰은 적절한 요인을 요청하는 데 사용됩니다. 요인 완료 후 JWT가 리턴됩니다. 이 JWT에는 정보의 몇 가지 주요 부분이 들어 있습니다.
- 요인 API를 요청하는 데 사용된 액세스 토큰에서 파생된
grant_id. 이 ID는/token에 대한 여러 요청 간에 상관을 유지합니다. factor수행된 및 이전에 수행된 모든 요인.
이 JWT는 /token에 jwtBearer 권한 부여 유형 플로우의
일부로 제공됩니다. 액세스 정책이 재평가되고 완전한 자격이 부여된 토큰 또는 다른
인증 확인이 발행됩니다.
returnJwt=true가
포함되어야 합니다.- 다음 첫 번째 요인 인증 API가 이 플래그를 지원합니다.
- 다음 MFA API가 이 플래그를 지원합니다.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
임시 검증 API도 이 플래그를 지원합니다. 하지만 이 API에서 발행된 JWT를 사용하려면 주제 청구 맵핑을 구성해야 합니다.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/SMS_One-time_Password_2.0/attemptSmsotpVerification_2_0
임시 검증 API도 이 플래그를 지원합니다. 하지만 이 API에서 발행된 JWT를 사용하려면 주제 청구 맵핑을 구성해야 합니다.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/FIDO/assertionResult
패스키를 1단계 인증 수단이나 2단계 인증 수단으로 사용할 수 있습니다.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Voice_One-time_Password_2.0/attemptVoiceotpVerification_2_0
임시 검증 API도 이 플래그를 지원합니다. 하지만 이 API에서 발행된 JWT를 사용하려면 주제 청구 맵핑을 구성해야 합니다.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/One-time_Password/attemptOtpVerification_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Time-based_One-time_Password_2.0/verifyTotpEnrollment_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
- 임시 요인 API의 경우 JWT의
sub필드가 요청에 사용된 임시 정보로 채워집니다 (예:userId가 아닌 이메일 또는 전화번호). returnJwt=true가 설정되면 대개 HTTP 본문 없이 상태 코드204를 리턴하는 검증 API가 해당 상태 코드를200으로 변경합니다. 이 검증 API는application/json의content-type을 리턴하고 다음과 같은 응답을 받습니다.
이미 JSON을 리턴한 요인 검증의 경우{ "assertion:"ey..."}assertion특성이 응답에 추가됩니다.
여러 권한 부여 유형에 액세스 정책 적용
애플리케이션을 구성할 때 액세스 정책이 특정 권한 부여 유형에 적용되는지 여부의 옵션이 있습니다.
이 구성은 grant_type 매개변수의 값을 기반으로 한 /token에 대한
요청에서 액세스 정책을 평가하는지 여부를 제어합니다. 이 평가는 특정 권한 부여에 대한 /token의 이전 호출에 관계없이
적용됩니다.
policyauth- 액세스 정책은 항상 사용 가능해야 합니다.
ROPC- ROPC 권한 부여 유형 이용 시
mfa_challenge응답을 지원하지 않으면 액세스 정책을 사용할 수 없습니다. JWT Bearer- 액세스 정책을
jwt-bearer권한 부여 유형에서 사용할 수 없는 경우policyauth플로우를 통해 MFA를 수행할 수 없습니다. 첫 번째 요인이 수행된 후에는 액세스 정책이 실행되지 않습니다. Refresh token- 컨텍스트 매개변수
original_grant_type을 컨텍스트 속성 조건으로 사용하는refresh_token요청의 서브세트에만 적용할 수 있습니다.