인증 코드 부여 워크플로우
ServiceNow® 는 권한 부여 및 자원 서버 역할을 하여 인증과 API 액세스를 모두 처리합니다. 1회 사용자 인증(SSO)이 활성화되면 인증을 위해 사용자를 구성된 IdP로 리디렉션하고 로그인 성공 후 토큰을 발행합니다.
시작하기 전에
필요한 역할: oauth_admin, mi_admin, admin
이 태스크 정보
이 주제 컬렉션은 권한 부여 서버와 자원 서버 역할을 모두 수행할 때 인증 및 API 액세스를 관리하는 방법에 ServiceNow 대한 정보를 제공합니다. 사용자 인증을 위한 ID 제공자(IdP)로의 리디렉션 및 인증 성공 후 인증 코드 ServiceNow 발급 등 SSO가 활성화되었을 때의 동작에 대해 설명합니다. 인증 코드를 ServiceNow 사용하면 토큰 발급 및 보호된 자원에 대한 액세스를 제어할 수 있습니다.
프로시저
-
클라이언트 애플리케이션에서 로그인합니다.
사용자는 클라이언트 애플리케이션 인터페이스에서 로그인 프로세스를 시작합니다.
-
인증 요청을 시작합니다.
클라이언트는 사용자를 권한 부여 엔드포인트로 ServiceNow 리디렉션하여 권한 부여 요청을 시작합니다. 권한 부여 요청은 클라이언트 유형(비공개 또는 공개)에 따라 요청 본문에
클라이언트 비밀또는PKCE 코드 챌린지를포함함으로써 시작할 수 있습니다. 권한 부여 요청 본문에 개인 클라이언트의 경우클라이언트 비밀을 포함하고 공용 클라이언트의 경우PKCE 코드 챌린지를포함합니다.- 개인 클라이언트의 경우
- 비공개 클라이언트에 대한 토큰 요청을 시작하는 동안 요청 본문에
클라이언트 암호를포함합니다. 절차에 따라 개인 클라이언트에 대해클라이언트 암호를사용하여 권한 부여 요청을 시작합니다. - 다음 매개변수를 사용하여 권한 부여 엔드포인트에 대한 GET 요청을 수행합니다.
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do표 1. 인증 요청 매개변수(개인 클라이언트-클라이언트 비밀) 매개변수 필수 설명 response_type예 값을 code로 설정하여 인증 코드 플로우를 시작합니다.client_id예 클라이언트 애플리케이션의 고유 식별자입니다. 형식: YOUR_CLIENT_ID
redirect_uri예 ServiceNow에서 인증 코드를 보내는 URI입니다. 예: https://yourapp.com/callback
범위예 공백으로 구분된 요청된 범위 목록입니다. 예:
incident_read incident_write.상태예 CSRF(교차 사이트 요청 위조) 공격을 방지하는 데 사용되는 클라이언트 생성 값입니다. 값은 리디렉션 URI에서 변경되지 않고 반환되므로 클라이언트에서 이를 확인할 수 있습니다. - 공용 클라이언트의 경우
- 공개 클라이언트에 대한 토큰 요청을 시작하는 동안 요청 본문에
PKCE 코드 챌린지를 포함합니다. 절차에 따라 공용 클라이언트에 대한PKCE 코드 챌린지를사용하여 인증 요청을 시작합니다. - 다음 매개변수를 사용하여 권한 부여 엔드포인트에 대한 GET 요청을 수행합니다.
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do표 2. 권한 부여 요청 매개변수(공용 클라이언트 - 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로 설정되고 업그레이드된 인스턴스에서는선택 사항으로 설정됩니다.상태매개변수가 누락된 경우 권한 요청이 실패하고 다음 오류가 표시됩니다.요청에 상태 매개변수가 없습니다.
-
클라이언트 애플리케이션에 액세스 동의를 부여합니다.
로그인 페이지(또는 SSO가 활성화된 경우 IdP)에 액세스 ServiceNow 하고 클라이언트 애플리케이션에 대한 액세스 동의를 부여합니다.
-
ServiceNow (또는 SSO가 활성화된 경우 IdP)는 자격 증명을 ServiceNow 확인하고 클라이언트에 인증 코드를 반환합니다.
인증에 성공하면 브라우저가
redirect_uri로 리디렉션되고 인증 코드가 쿼리 문자열에 포함됩니다.https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
클라이언트는 ServiceNow의 토큰 엔드포인트를 호출하여 액세스 토큰(및 비공개 클라이언트인 경우 새로 고침 토큰)에 대한 인증 코드를 교환합니다.
액세스 토큰에 대한 인증 코드는 클라이언트 유형(비공개 또는 공개)에 따라 요청 본문에
클라이언트 비밀또는PKCE 코드 챌린지를포함하여 시작할 수 있습니다. 토큰 요청 본문에 비공개 클라이언트의 경우클라이언트 비밀, 공개 클라이언트의 경우PKCE 코드 챌린지를포함합니다.- 개인 클라이언트의 경우
- 비공개 클라이언트에 대한 토큰 요청을 시작하는 동안 요청 본문에
클라이언트 암호를포함합니다. 절차에 따라 개인 클라이언트에 대해클라이언트 암호를사용하여 토큰 요청을 시작합니다. - 비공개 클라이언트의 경우 클라이언트는 다음 매개변수를 사용하여 토큰 엔드포인트에
POST요청을 보냅니다.Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded표 3. 토큰 요청 매개변수(개인 클라이언트-클라이언트 비밀) 매개변수 필수 설명 grant_type예 코드를 토큰으로 교환하려면 값을 authorization_code로 설정합니다.코드예 인증 엔드포인트에서 받은 인증 코드입니다. redirect_uri예 초기 인증 요청에 사용되는 URI입니다. 예: https://yourapp.com/callback
client_id예 클라이언트 애플리케이션의 고유 식별자입니다. client_secret예 토큰 엔드포인트로 인증하는 데 사용되는 클라이언트의 비밀입니다. 상태예 CSRF 공격을 방지하는 데 사용되는 클라이언트 작성 값입니다. 값은 리디렉션 URI에서 변경되지 않은 상태로 반환되므로 클라이언트가 유효성을 검사할 수 있습니다. - 공용 클라이언트의 경우
- 공개 클라이언트에 대한 토큰 요청을 시작하는 동안 요청 본문에
PKCE 코드 챌린지를 포함합니다. 절차에 따라 공용 클라이언트에 대한PKCE 코드 챌린지를사용하여 인증 요청을 시작합니다. - 클라이언트는 다음 매개변수를 사용하여 토큰 엔드포인트에 POST 요청을 보냅니다.
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded표 4. 토큰 요청 매개변수(공용 클라이언트-PKCE) 매개변수 필수 설명 grant_type예 코드를 토큰으로 교환하려면 값을 authorization_code로 설정합니다.코드예 인증 엔드포인트에서 받은 인증 코드입니다. redirect_uri예 초기 인증 요청에 사용되는 URI입니다. 예: https://yourapp.com/callback
client_id예 클라이언트 애플리케이션의 고유 식별자입니다. code_verifier예 PKCE code_challenge생성하는 데 사용되는 원래 문자열입니다.상태예 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예 토큰 엔드포인트로 인증하는 데 사용되는 클라이언트 암호입니다.