외부 클라이언트용 OAuth JWT API 엔드포인트 생성(컴퓨터 대 컴퓨터 통합)

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 10분
  • OAuth JWT 전달자 토큰을 사용하면 최종 사용자가 수동으로 로그인하거나 암호를 공유하지 않고도 클라이언트 웹 애플리케이션이 인바운드 JWT 권한 유형을 사용하여 인스턴스로 원활하게 인증할 수 있습니다.

    시작하기 전에

    JSON 웹 토큰(JWT)에 지원되는 알고리즘: RS256, RS384, RS512, ES256, ES384, ES512.

    클라이언트 측에서 다음 클레임을 사용하여 JWT를 생성합니다.

    • aud: 클라이언트 ID의 값과 일치해야 합니다.
    • sub: 토큰을 연결하려는 사용자의 메일과 같은 사용자 식별자여야 합니다.
    • iss: 클라이언트 ID의 값과 일치하는 것이 좋습니다. audiss가 일치하지 않는 경우 클레임 유효성 검사에 iss 값을 추가합니다.
    • exp: 원하는 만료입니다.
    그림 1. 디코딩된 JSON 웹 토큰 예제
    디코딩된 JSON 웹 토큰 예제

    의 구성 ServiceNow

    이 태스크 정보

    JWT 권한 부여 유형을 사용하면 요청에 암호가 포함되지 않으므로 웹 서비스 간의 보안을 강화할 수 있습니다. 예를 들어, 외부 애플리케이션을 개발하고 토큰을 사용하여 인스턴스에 대한 인바운드 요청을 인증할 수 있습니다 ServiceNow .

    필요한 역할: 관리자

    JSON 웹 토큰에 대한 자세한 내용은 다음을 참조하십시오 https://jwt.io/.

    프로시저

    1. 클라이언트 앱의 공개 키를 sys_certificate 테이블에 추가합니다.
    2. 수신 JWT를 확인하도록 인스턴스에 구성을 ServiceNow 설정합니다.
      1. 다음으로 이동 시스템 OAuth > 애플리케이션 레지스트리.
      2. 외부 클라이언트용 OAuth JWT API 엔드포인트 작성을 선택합니다.
      3. 토큰에 대한 정보로 양식을 작성합니다.
        표 1. OAuth JWT 테이블
        필드 설명
        이름 JWT OAuth 액세스가 필요한 애플리케이션을 식별하는 고유 이름입니다.
        클라이언트 ID 애플리케이션의 자동 생성 고유 ID입니다. 시스템은 이 필드의 값을 사용하여 공개 또는 공유 키를 검색하고 JWT를 확인합니다. 이 필드의 값은 JWT의 발급자 및 대상 클레임의 값과 일치해야 합니다.
        클라이언트 비밀 인스턴스와 클라이언트 애플리케이션 또는 웹 사이트 둘 다에서 서로에 대한 통신을 승인하는 데 사용하는 공유 비밀 문자열입니다. 인스턴스가 클라이언트 비밀을 자동으로 생성하려면 이 필드를 비워 두십시오. 기존 클라이언트 암호를 표시하려면 잠금 아이콘을 선택합니다.
        주:
        공용 클라이언트를 선택한 경우 클라이언트 암호를 생략할 수 있습니다.
        사용자 필드 시스템이 JWT의 주체 클레임 값을 일치시키기 위해 사용하는 사용자(sys_user) 테이블의 필드입니다. 예를 들어 주체 클레임 값이 user.name@example.com 인 토큰을 추가하는 경우 사용자 필드를이메일로 설정합니다. 이 필드는 이메일 필드에서 user.name@example.com 값을 검색하고 인바운드 요청에서 일치하는 사용자 기록을 사용하도록 시스템에 지시합니다.
        JTI 검증 사용 토큰 교환마다 새 토큰을 요구하려면 선택합니다.

        기본값: 선택됨.

        애플리케이션 읽기 전용 애플리케이션 범위입니다. 이 필드는 자동으로 채워집니다.
        다음에서 접근 가능 교차 범위 접근 정책입니다. 자세한 내용은 애플리케이션 액세스 설정을 참조하세요.
        접근 토큰 수명 토큰이 유효한 시간입니다.

        단위: 초

        토큰 형식 생성할 토큰의 형식입니다. 형식은 토큰의 구조와 토큰에 포함된 정보를 결정합니다.
        주체 클레임 JWT 토큰의 주체(하위) 클레임 값을 채우는 데 사용되는 사용자(sys_user) 테이블의 필드입니다. 하위 클레임은 JWT 토큰의 주체 또는 사용자를 식별하는 정보 조각입니다. 이 필드는 토큰 형식이 JWT인 경우에만 적용됩니다.
        클럭 오차 JWT에서 expnbf 클레임의 유효성을 검사할 때 서버와 클라이언트 클록 간에 허용되는 시간 차이입니다.

        단위: 초

        기본값: 300

        토큰 제한 적용 인증 프로파일을 사용하도록 설정된 API에서만 토큰을 사용할 수 있도록 하려면 선택합니다. 접근 권한 부여는 API 접근 정책을 사용하여 설정할 수 있습니다. 자세한 내용은 REST API 액세스 정책 만들기를 참조하세요.

        기본값: 선택 취소.

        설명 애플리케이션과 연결할 추가 정보입니다.
        공용 클라이언트 JWT 클라이언트가 공용이면 이 필드를 양식에 추가합니다. 이 옵션을 선택하면 클라이언트 암호를 포함할 필요가 없습니다.

        기본값: 선택 취소.

        클라이언트 유형 클라이언트 유형에 따라 클라이언트 유형을 선택합니다. 옵션:
        • iframe 임베디드
        • 사용자형 통합
        • 서비스형 통합
        자세한 내용은 를 참조하십시오 OAuth 및 SSO 기록에 대한 클라이언트 유형 구성.
      4. 양식을 저장합니다.
      5. JWT 검증기 맵 관련 목록에 기록을 추가하여 JWT 서명을 확인합니다.
        표 2. JWT 검증기 맵 테이블
        필드 설명
        이름 JWT 매핑 기록의 이름입니다.
        아이 JWT의 키 ID입니다.
        공유 키 지정된 키 ID의 공유 키입니다.
        애플리케이션 읽기 전용 애플리케이션 범위입니다.
        시스템 인증서 X.509 인증서(sys_certificate) 테이블의 인증서 기록. 1단계에서 업로드된 인증서입니다.
      6. JWT와 연결된 사용자 지정 클레임을 OAuth JWT 클레임 확인 관련 목록에 추가합니다.

        다음 필수 클레임에 대한 기록을 추가할 필요가 없습니다.

        • ISS는
        • aud
        • 하위
        • exp
        주:
        • audiss가 일치하지 않는 경우 클레임 유효성 검사에 iss 값을 추가합니다.
        • 인증서의 경우 여러 키와 연결된 여러 검증기 맵을 추가할 수 있습니다.
        표 3. OAuth JWT 클레임 확인 테이블
        필드 설명
        내 외부 클라이언트 OAuth JWT 기록으로 자동으로 채워집니다.
        클레임 값 유형 클레임 값의 데이터 유형입니다.
        클레임 이름 추가할 클레임의 이름입니다.
        클레임 값 클레임의 값입니다.
        애플리케이션 읽기 전용 애플리케이션 범위입니다.
    3. 인스턴스에서 액세스 토큰을 가져오려면 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.do

      JWT 클라이언트가 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 권한 부여 유형에는 새로 고침 토큰이 포함되지 않습니다.
    4. REST API를 호출하여 액세스 토큰을 사용하여 자원에 액세스합니다.

      다음은 토큰을 사용하여 인시던트 테이블에 액세스하는 cURL 명령입니다.

      $ curl -H "Authorization: Bearer KynMY2H0uwWkRc8g8YLXjnQxWbH5_wbnSiLsnaOoKw61GZkkV0ytZP74uF7hJyjfsWfaaFijqQzq2kcABNJxN" 
      https://instancename.service-now.com/api/now/v1/table/incident

    결과

    시스템은 REST 호출에서 액세스 토큰을 검색하고 요청된 자원에 대한 액세스를 활성화합니다.