외부 클라이언트용 OAuth JWT API 엔드포인트 작성
외부 클라이언트가 웹 토큰을 사용하여 인스턴스에 액세스할 ServiceNow 수 있도록 OAuth JWT(JSON Web Token) API 엔드포인트를 생성합니다.
시작하기 전에
필요한 역할: admin
다음 클레임을 사용하여 JWT(JSON Web Token)를 생성합니다.
aud: 클라이언트 ID의 값과 일치해야 합니다.sub: 토큰을 연결하려는 사용자의 메일과 같은 사용자 식별자여야 합니다.iss: 클라이언트 ID의 값과 일치시키는 것이 좋습니다.exp: 원하는 만료.
JSON 웹 토큰에 대한 자세한 내용은 을 참조하십시오 https://jwt.io/.
이 태스크 정보
프로시저
- 키 쌍을 만들고 X.509 인증서(sys_certificate) 테이블에 공개 키를 추가합니다.
-
인스턴스에서 ServiceNow 구성을 설정하여 수신 JWT를 확인합니다.
- 다음으로 이동 시스템 OAuth > 애플리케이션 레지스트리레이블이 표시됩니다.
- 외부 클라이언트에 대한 OAuth JWT API 엔드포인트 만들기를 선택합니다.
-
토큰에 대한 정보로 양식을 작성합니다.
표 1. OAuth JWT 테이블 필드 설명 이름 JWT OAuth 액세스가 필요한 애플리케이션을 식별하는 고유 이름입니다. 클라이언트 ID 애플리케이션의 자동 생성 고유 ID입니다. 시스템은 이 필드의 값을 사용하여 공개 또는 공유 키를 검색하고 JWT의 유효성을 검증합니다. 이 필드의 값은 JWT의 발급자 및 대상 클레임 값과 일치해야 합니다. 클라이언트 비밀 인스턴스와 클라이언트 애플리케이션 또는 웹 사이트가 서로 간의 통신을 승인하는 데 사용하는 공유 암호 문자열입니다. 인스턴스가 클라이언트 비밀을 자동으로 생성하도록 하려면 이 필드를 비워둡니다. 기존 클라이언트 암호를 표시하려면 잠금 아이콘을 클릭합니다. 주:Public Client(공용 클라이언트)를 선택한 경우 Client Secret(클라이언트 암호)을 생략할 수 있습니다.로고 URL 애플리케이션 로고로 사용할 이미지가 들어 있는 URL입니다. 이 로고는 사용자가 클라이언트 애플리케이션에 인스턴스의 제한된 자원에 대한 액세스 권한을 부여하는 요청을 받을 때 승인 페이지에 나타납니다. 사용자 필드 시스템이 JWT의 주체 클레임 값을 일치시키기 위해 사용하는 사용자(sys_user) 테이블의 필드입니다. 예를 들어 주체 클레임 값이 user.name@example.com 인 토큰을 추가하는 경우 사용자 필드를전자 메일로 설정합니다. 이 필드는 이메일 필드에서 user.name@example.com 값을 검색하고 인바운드 요청에서 일치하는 사용자 기록을 사용하도록 시스템에 지시합니다. JTI 검증 사용 토큰을 교환할 때마다 새 토큰을 요구하려면 선택합니다. 기본값: 선택됨.
애플리케이션 읽기 전용 애플리케이션 범위입니다. 다음에서 접근 가능 교차 범위 액세스 정책입니다. 자세한 내용은 응용 프로그램 액세스 설정을 참조하세요. 액세스 토큰 수명 토큰이 유효한 시간입니다. 단위: 초
클럭 오차 JWT에서 exp및nbf클레임의 유효성을 검사할 때 서버와 클라이언트 클럭 간에 허용되는 시간 차이입니다.단위: 초
기본값: 300
토큰 제한 적용 인증 프로파일을 허용하도록 설정된 API에만 토큰을 사용할 수 있도록 허용하려면 선택합니다. API 액세스 정책을 사용하여 권한 부여 권한을 설정할 수 있습니다. 자세한 내용은 REST API 액세스 정책 만들기를 참조하세요. 기본값: 선택되지 않음.
의견 애플리케이션과 연결할 추가 정보입니다. 공용 클라이언트 JWT 클라이언트가 공용인 경우 양식에 이 필드를 추가합니다. 이 옵션을 선택하면 클라이언트 비밀을 포함할 필요가 없습니다. 기본값: 선택되지 않음.
- 양식을 저장합니다.
-
JWT 검증기 맵 관련 목록에 기록을 추가하여 JWT 서명을 확인합니다.
표 2. JWT 검증기 맵 테이블 필드 설명 이름 JWT 매핑 기록의 이름입니다. 아이 JWT의 키 ID입니다. 공유 키 지정된 키 ID의 공유 키입니다. 애플리케이션 읽기 전용 애플리케이션 범위입니다. 시스템 인증서 X.509 인증서(sys_certificate) 테이블의 인증서 레코드입니다. -
JWT와 연결된 사용자 지정 클레임을 OAuth JWT 클레임 확인 관련 목록에 추가합니다.
다음 필수 클레임에 대한 레코드를 추가할 필요가 없습니다.
- Iss
- Aud
- 하위
- 특급
표 3. OAuth JWT 클레임 확인 테이블 필드 설명 내 외부 클라이언트 OAuth JWT 기록으로 자동으로 채워집니다. 클레임 값 유형 클레임 값의 데이터 유형입니다. 클레임 이름 추가하려는 클레임의 이름입니다. 클레임 값 클레임의 값입니다. 애플리케이션 읽기 전용 애플리케이션 범위입니다.
-
JWT 토큰이 포함된 cURL 요청을 전송하여 인스턴스에서 액세스 토큰을 가져옵니다.
다음은 액세스 토큰을 요청하는 샘플 cURL 명령입니다.
$ curl -d"grant_type= urn:ietf:params:oauth:grant-type:jwt-bearer &client_id=be3aeb583ace210011c15b24a43e25d8 &client_secret=client_password &assertion= eyJraWQiOiJzYW1wbGVrZXlpZCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJhdWQiOiI5YzZlMmQxNzU0MzMyMDEwMDFhMTE4Y2FhMGVhMmE0MyIsInN1YiI6ImFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiOWM2ZTJkMTc1NDMzMjAxMDAxYTExOGNhYTBlYTJhNDMiLCJleHAiOjE2MjI3MDI1MjYsImlhdCI6MTYyMjcwMjQ2NiwianRpIjoiNWRkMGUxYzctYjY1Ny00YmQ4LTlkY2UtMTdhZDdlZmUwNmFiIn0.PDoffnN2nq9ZNdxhOTLNbzlls4C1gsacahWr0kmPcGJDUJ_OQunmY5YXfpqkASiZixcQDS4kMwyqK9bha1-SnPOXq7zCIlJGCGFOv_OjEpQvMqmiKtLVk3jCsD03eXSoR4V-EzoCChiXpK87K5tMfM5k0YV9KfrxgvjUipgfni5N0JeyqkssMXBdkuE90XW_hBCo9AMMQm6J2PNMWb2O_O8rOX06KHuc4-Ip8wcRZ8a_bndCSmHl8Em7v4DvqTkLzlnF_-BXuM3T7nTI21cDXQKqZnqzzriu8irlAsscJFTxkh-_Ynei5RgYtL_Mvx2-HDO-XGofBhlAY2t9K36sz71HHqFZr5qCOIOAPguNzAy5-MOuZjOU_kH6ugIRycaNMDRjaU7gOvUHEERw3d0sI20OChIWOryBSwdTs7lgB1WzsJWCNVo81ssc2yko3jPoygt90tMwI_6A-4J-mlgq_fS_SvPUAqq_2UUJfVOTT5WGeq58cXfwRJmsDo49IhL3kXDVWT2gxaqhEdBQEW16UmRoTUzRs9A9sOm18y3skmOVtnEOm-MlJMFQZ754UMzbiH0ZsMmk1ivCGIjex5J0_lDjKElWF5RHGz3YShCoa4JKDZsqYMvIk1SvzyQXjuFqPdS2vzg2m1eKGUwr3m6uNs_HflcDystwVdMZ7nLlBG4" https://instancename.service-now.com/oauth_token.doJWT 클라이언트가 Mobile SDK와 같은 공용 클라이언트인 경우 요청에서 client_id 및 client_secret 매개변수를 생략할 수 있습니다. 다음은 client_id 및 client_secret 생략하는 액세스 토큰을 요청하는 샘플 cURL 명령입니다.
$ curl -d"grant_type= urn:ietf:params:oauth:grant-type:jwt-bearer &assertion= eyJraWQiOiJzYW1wbGVrZXlpZCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJhdWQiOiI5YzZlMmQxNzU0MzMyMDEwMDFhMTE4Y2FhMGVhMmE0MyIsInN1YiI6ImFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiOWM2ZTJkMTc1NDMzMjAxMDAxYTExOGNhYTBlYTJhNDMiLCJleHAiOjE2MjI3MDI1MjYsImlhdCI6MTYyMjcwMjQ2NiwianRpIjoiNWRkMGUxYzctYjY1Ny00YmQ4LTlkY2UtMTdhZDdlZmUwNmFiIn0.PDoffnN2nq9ZNdxhOTLNbzlls4C1gsacahWr0kmPcGJDUJ_OQunmY5YXfpqkASiZixcQDS4kMwyqK9bha1-SnPOXq7zCIlJGCGFOv_OjEpQvMqmiKtLVk3jCsD03eXSoR4V-EzoCChiXpK87K5tMfM5k0YV9KfrxgvjUipgfni5N0JeyqkssMXBdkuE90XW_hBCo9AMMQm6J2PNMWb2O_O8rOX06KHuc4-Ip8wcRZ8a_bndCSmHl8Em7v4DvqTkLzlnF_-BXuM3T7nTI21cDXQKqZnqzzriu8irlAsscJFTxkh-_Ynei5RgYtL_Mvx2-HDO-XGofBhlAY2t9K36sz71HHqFZr5qCOIOAPguNzAy5-MOuZjOU_kH6ugIRycaNMDRjaU7gOvUHEERw3d0sI20OChIWOryBSwdTs7lgB1WzsJWCNVo81ssc2yko3jPoygt90tMwI_6A-4J-mlgq_fS_SvPUAqq_2UUJfVOTT5WGeq58cXfwRJmsDo49IhL3kXDVWT2gxaqhEdBQEW16UmRoTUzRs9A9sOm18y3skmOVtnEOm-MlJMFQZ754UMzbiH0ZsMmk1ivCGIjex5J0_lDjKElWF5RHGz3YShCoa4JKDZsqYMvIk1SvzyQXjuFqPdS2vzg2m1eKGUwr3m6uNs_HflcDystwVdMZ7nLlBG4" https://instancename.service-now.com/oauth_token.do인스턴스는 응답에서 접근 토큰을 반환합니다.
{ "access_token": "KynMY2H0uwWkRc8g8YLXjnQxWbH5_wbnSiLsnaOoKw61GZkkV0ytZP74uF7hJyjfsWfaaFijqQzq2kcABNJxNA", "scope": "useraccount", "token_type": "Bearer", "expires_in": 1799 }주:인바운드 JWT 권한 부여 유형에는 새로 고침 토큰이 포함되지 않습니다. -
REST API를 호출하여 액세스 토큰을 사용하여 자원에 액세스합니다.
다음은 토큰을 사용하여 인시던트 테이블에 액세스하는 cURL 명령입니다.
$ curl -H "Authorization: Bearer KynMY2H0uwWkRc8g8YLXjnQxWbH5_wbnSiLsnaOoKw61GZkkV0ytZP74uF7hJyjfsWfaaFijqQzq2kcABNJxN" https://instancename.service-now.com/api/now/v1/table/incident