인증 코드 부여 워크플로우
OAuth 인증 코드 부여는 사용자 동의에 따라 사용자 데이터에 액세스하는 웹, 모바일 또는 데스크톱 앱에 안전하고 널리 사용되는 흐름입니다. 프라이빗 클라이언트(클라이언트 암호 사용)와 공용 클라이언트(PKCE 사용)를 모두 지원합니다.
시작하기 전에
필요한 역할: oauth_admin, mi_admin, admin
이 태스크 정보
이 주제 콜렉션은 클라이언트 애플리케이션이 인증 코드 부여 플로우를 사용하여 ServiceNow에서 토큰을 가져오고 해당 토큰으로 API를 호출하는 방법에 대한 정보를 제공합니다. 프라이빗 클라이언트는 클라이언트 비밀을 사용하는 반면 퍼블릭 클라이언트는 PKCE 코드 챌린지를 사용합니다.
프로시저
-
클라이언트 애플리케이션에서 로그인합니다.
사용자는 클라이언트 애플리케이션 인터페이스에서 로그인 프로세스를 시작합니다.
-
인증 요청을 시작합니다.
클라이언트는 사용자를 ServiceNow 인증 엔드포인트로 리디렉션합니다. 권한 부여 요청을 시작하는 방법은 클라이언트 유형(Public 또는 Private)에 따라 다릅니다.
- 공용 클라이언트
-
공용 클라이언트(예: 모바일 또는 단일 페이지 애플리케이션)는 클라이언트 비밀을 안전하게 저장할 수 없습니다. 따라서 보안을 강화하려면 PKCE(Proof Key for Code Exchange)를 사용해야 합니다.
- 권한 부여 요청에 PKCE 코드 챌린지 를 포함하고 코드 챌린지 메서드를 지정합니다.
- 토큰 요청 중에 클라이언트는 권한 부여 코드의 유효성을 검사하기 위해 코드 검증기를 보내야 합니다.
- 다음 매개변수를 사용하여 권한 부여 엔드포인트에 대한 GET 요청을 수행합니다.
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do표 1. 권한 부여 요청 매개변수(공용 클라이언트 - PKCE) 매개변수 필수 설명 response_type예 값을 code로 설정하여 인증 코드 플로우를 시작합니다.client_id예 클라이언트 애플리케이션의 고유 식별자입니다. 형식: YOUR_CLIENT_ID
redirect_uri예 ServiceNow에서 인증 코드를 보내는 URI입니다. 예: https://yourapp.com/callback
code_challenge예 코드 검증기의 base64url로 인코딩된 SHA-256 해시입니다. 이는 PKCE 흐름의 일부로 사용됩니다. code_challenge_method예 코드 챌린지에 사용되는 변환 방법을 지정합니다. S256으로 설정합니다.범위옵션 공백으로 구분된 요청된 범위 목록입니다. 예:
incident_read incident_write.상태예 CSRF 공격을 방지하는 데 사용되는 클라이언트 생성 값입니다. 값은 리디렉션 URI에서 변경되지 않은 상태로 반환되므로 클라이언트가 유효성을 검사할 수 있습니다. 주:Madrid 릴리스부터시스템 속성 glide.oauth.state.parameter.required는 OAuth 요청에서상태매개변수 사용을 의무화합니다.상태속성은 새 인스턴스에서 기본적으로true로 설정되고 업그레이드된 인스턴스에서는선택 사항으로 설정됩니다.상태매개변수가 누락된 경우 권한 요청이 실패하고 다음 오류가 표시됩니다.요청에 상태 매개변수가 없습니다. - 개인 클라이언트
-
프라이빗 클라이언트(예: 서버 쪽 애플리케이션)는 클라이언트 비밀을 안전하게 저장할 수 있으며 PKCE가 필요하지 않습니다.
- 권한 부여 요청은 사용자를 권한 부여 엔드포인트로 리디렉션하여 시작됩니다. 이 단계에서는 클라이언트 비밀 또는 PKCE 코드 챌린지가 필요하지 않습니다.
- 토큰 요청 중에 클라이언트는 액세스 토큰을 얻기 위한 인증 코드와 함께 클라이언트 비밀을 포함합니다.
- 다음 매개변수를 사용하여 권한 부여 엔드포인트에 대한 GET 요청을 수행합니다.
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do표 2. 인증 요청 매개변수(개인 클라이언트-클라이언트 비밀) 매개변수 필수 설명 response_type예 값을 code로 설정하여 인증 코드 플로우를 시작합니다.client_id예 클라이언트 애플리케이션의 고유 식별자입니다. 형식: YOUR_CLIENT_ID
redirect_uri예 ServiceNow에서 인증 코드를 보내는 URI입니다. 예: https://yourapp.com/callback
범위옵션 공백으로 구분된 요청된 범위 목록입니다. 예:
incident_read incident_write.상태예 CSRF(교차 사이트 요청 위조) 공격을 방지하는 데 사용되는 클라이언트 생성 값입니다. 값은 리디렉션 URI에서 변경되지 않은 상태로 반환되므로 클라이언트가 유효성을 검사할 수 있습니다.
-
로그인하고 클라이언트 애플리케이션에 대한 액세스 동의를 부여합니다.
로그인 ServiceNow (또는 SSO가 활성화된 경우 IdP)하고 클라이언트 애플리케이션에 대한 액세스 동의를 부여합니다.
-
ServiceNow (또는 SSO가 활성화된 경우 IdP)는 자격 증명을 ServiceNow 확인하고 클라이언트에 인증 코드를 반환합니다.
인증에 성공하면 브라우저가
redirect_uri로 리디렉션되고 인증 코드가 쿼리 문자열에 포함됩니다.https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
인증 요청을 시작합니다.
클라이언트는 액세스 토큰에 대한 ServiceNow 인증 엔드포인트로 사용자를 리디렉션합니다. 권한 부여 요청을 시작하는 방법은 클라이언트 유형(Public 또는 Private)에 따라 다릅니다.
- 공용 클라이언트
-
공용 클라이언트(예: 모바일 또는 단일 페이지 애플리케이션)는 클라이언트 비밀을 안전하게 저장할 수 없습니다. 따라서 보안을 강화하려면 PKCE(Proof Key for Code Exchange)를 사용해야 합니다.
- 권한 부여 요청에 PKCE 코드 챌린지 를 포함하고 코드 챌린지 메서드를 지정합니다.
- 토큰 요청 중에 클라이언트는 권한 부여 코드의 유효성을 검사하기 위해 코드 검증기를 보내야 합니다.
- 클라이언트는 다음 매개변수를 사용하여 토큰 엔드포인트에 POST 요청을 보냅니다.
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded표 3. 토큰 요청 매개변수(공용 클라이언트-PKCE) 매개변수 필수 설명 grant_type예 코드를 토큰으로 교환하려면 값을 authorization_code로 설정합니다.코드예 인증 엔드포인트에서 받은 인증 코드입니다. redirect_uri예 초기 인증 요청에 사용되는 URI입니다. 예: https://yourapp.com/callback
client_id예 클라이언트 애플리케이션의 고유 식별자입니다. code_verifier예 PKCE code_challenge생성하는 데 사용되는 원래 문자열입니다.상태예 CSRF 공격을 방지하는 데 사용되는 클라이언트 작성 값입니다. 값은 리디렉션 URI에서 변경되지 않은 상태로 반환되므로 클라이언트가 유효성을 검사할 수 있습니다. - 개인 클라이언트
-
프라이빗 클라이언트(예: 서버 쪽 애플리케이션)는 클라이언트 비밀을 안전하게 저장할 수 있으며 PKCE가 필요하지 않습니다.
- 권한 부여 요청은 사용자를 권한 부여 엔드포인트로 리디렉션하여 시작됩니다. 이 단계에서는 클라이언트 비밀 또는 PKCE 코드 챌린지가 필요하지 않습니다.
- 토큰 요청 중에 클라이언트는 액세스 토큰을 얻기 위한 인증 코드와 함께 클라이언트 비밀을 포함합니다.
- 다음 매개변수를 사용하여 인증 엔드포인트에 대한 POST 요청을 수행합니다.
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded표 4. 토큰 요청 매개변수(개인 클라이언트-클라이언트 비밀) 매개변수 필수 설명 grant_type예 코드를 토큰으로 교환하려면 값을 authorization_code로 설정합니다.코드예 인증 엔드포인트에서 받은 인증 코드입니다. redirect_uri예 초기 인증 요청에 사용되는 URI입니다. 예: https://yourapp.com/callback
client_id예 클라이언트 애플리케이션의 고유 식별자입니다. client_secret예 토큰 엔드포인트로 인증하는 데 사용되는 클라이언트의 비밀입니다. 상태예 CSRF 공격을 방지하는 데 사용되는 클라이언트 작성 값입니다. 값은 리디렉션 URI에서 변경되지 않은 상태로 반환되므로 클라이언트가 유효성을 검사할 수 있습니다.
-
액세스 토큰으로 API에 ServiceNow 액세스합니다.
- 예제:
- 액세스 토큰을 사용하여 API에 대한 GET 요청을 수행합니다.
Authorization헤더에 액세스 토큰을 포함합니다.
Method: GET End Point: https://<servicenow_base_url>/api/now/incident Authorization: Bearer YOUR_ACCESS_TOKEN -
액세스 토큰이 만료된 경우 갱신합니다.
다음 매개 변수를 사용하여 POST 요청을 만들어 액세스 토큰(프라이빗 클라이언트만 해당)을 새로 고칩니다.
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded표 5. 새로 고침 토큰 요청 매개변수(개인 클라이언트) 매개변수 필수 설명 grant_type예 새 접근 토큰을 요청하려면 값을 refresh_token로 설정합니다.refresh_token예 토큰 엔드포인트에서 이전에 발급한 새로 고침 토큰입니다. client_id예 클라이언트 애플리케이션의 고유 식별자입니다. client_secret예 토큰 엔드포인트로 인증하는 데 사용되는 클라이언트 암호입니다.