인증 및 승인

이 섹션에서는 다음을 사용한 인증 및 승인의 개념을 설명합니다. 특히 Fleet Engine과 통합하는 방법을 알아야 합니다

다음을 통해 라스트 마일 Fleet 솔루션이 제공하는 기능을 구성할 수 있습니다. Google Cloud Console로 이동합니다. Fleet Engine SDK 인증 기관이 서명한 JSON 웹 토큰 (JWT)을 적절한 서비스 계정을 선택합니다.

개요

Fleet Engine에 대해 인증 및 승인하는 고객 백엔드는 다음을 사용해야 합니다. standard 애플리케이션 기본값 사용자 인증 정보 메커니즘을 제공합니다

Fleet Engine은 신뢰도가 낮은 환경에서 발생한 호출도 수신함 스마트폰과 브라우저 등입니다. 서비스 계정 보안 비밀 키만 보호하기 위해 고객은 신뢰할 수 있는 환경에 적합하며 백엔드가 새 포드를 생성하며 Fleet Engine 관련 추가 클레임이 있는 서명된 JSON 웹 토큰 (JWT) 그런 다음 휴대전화와 같이 신뢰할 수 없는 환경으로 발행될 수 있습니다.

인증 설계 원칙

Fleet Engine의 인증 흐름에는 다음 설계 원칙이 포함됩니다.

  • IAM 역할은 주 구성원에게 허용되는 리소스에 대한 권한 집합입니다. 예를 들어 관리자 역할은 애플리케이션 기본값으로 모든 작업을 할 수 있습니다. 사용자 인증 정보. 신뢰할 수 없는 드라이버* 역할은 업데이트만 허용됩니다. 인증 및 검증을 위해 JWT를 사용하도록 제한 있습니다.

  • 신뢰할 수 없는 환경의 경우 JWT 클레임은 호출자가 작동할 수 있습니다. 특정 작업 또는 배송 수단일 수 있습니다.

  • 신뢰할 수 없는 환경에서 실행 중인 코드는 먼저 신뢰할 수 있는 환경에서 실행되는 JWT를 발행합니다.

  • Fleet Engine은 리소스:

    1. 호출하는 주 구성원에게 적절한 권한이 있음 (역할을 통해) 할 수 있습니다.

    2. 비관리자 역할의 경우 요청에서 전달된 JWT 클레임은 다음을 제공합니다. 모든 권한이 있는지 확인할 수 있습니다

인증 흐름

다음 시퀀스 다이어그램은 이러한 인증 흐름의 세부정보를 보여줍니다.

  1. Fleet 관리자가 서비스 계정을 만듭니다.

  2. Fleet 관리자가 서비스 계정에 특정 IAM 역할을 할당합니다.

  3. Fleet 관리자가 서비스 계정으로 백엔드 구성 사용자 인증 정보를 제공합니다

  4. 클라이언트 앱이 고객 백엔드에서 JWT를 요청합니다. 요청자는 운전자 앱, 소비자 앱 또는 모니터링 앱일 수 있습니다.

  5. 고객 백엔드에서 각 서비스에 대한 JWT에 서명하고 발급합니다. 있습니다. 클라이언트 앱이 JWT를 수신합니다.

  6. 클라이언트 앱이 JWT를 사용하여 Fleet Engine에 연결하여 읽거나 수정합니다. 설정 단계에서 할당된 IAM 역할에 따라 다릅니다.

인증 시퀀스 다이어그램

Cloud 프로젝트 설정

클라우드 프로젝트를 설정하려면 먼저 프로젝트를 만든 후 서비스 계정을 만듭니다

Google Cloud 프로젝트를 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔을 사용하여 Google Cloud 프로젝트를 만듭니다.
  2. API 및 서비스 대시보드를 사용하여 Local Rides and Deliveries API.

서비스 계정 및 IAM 역할

서비스 계정은 사용자가 아닌 응용 프로그램에서 사용하는 특별한 종류의 계정입니다. 일반적으로 서비스 계정은 서로 다른 권한을 부여하는 JWT를 발행하는 데 사용됩니다. 권한을 부여할 수 있습니다 악용 가능성을 줄이기 위해 최소 역할 집합이 있는 서비스 계정을 여러 개 만들 수 있습니다. 필요합니다.

라스트 마일 Fleet 솔루션은 다음 역할을 사용합니다.

역할설명
Fleet Engine Delivery 신뢰할 수 있는 드라이버 사용자

roles/fleetengine.deliveryTrustedDriver
배송 차량 및 작업을 만들고 업데이트할 권한을 부여합니다. 배송 차량 위치 및 작업 상태 업데이트 포함 결과를 확인할 수 있습니다 이 역할을 가진 서비스 계정에서 발급된 토큰 일반적으로 배달 기사의 휴대기기 또는 백엔드 서버입니다
Fleet Engine Delivery 신뢰할 수 없는 드라이버 사용자

roles/fleetengine.deliveryUntrustedDriver
배송 차량 위치를 업데이트할 권한을 부여합니다. 발급된 토큰 이 역할이 부여된 서비스 계정에서 일반적으로 전송에 사용됩니다 영향을 줍니다.
Fleet Engine Delivery 일반 사용자

roles/fleetengine.deliveryConsumer
추적 ID를 사용하여 작업을 검색할 수 있는 권한을 부여합니다. 작업 정보를 읽을 수 있지만 업데이트할 수는 없습니다. 발급된 토큰 이 역할을 가진 서비스 계정이 사용하는 서비스 계정은 일반적으로 웹브라우저
Fleet Engine Delivery 관리자

roles/fleetengine.deliveryAdmin
게재 리소스에 대한 읽기 및 쓰기 권한을 부여합니다. 교장 JWT를 사용할 필요가 없으며 대신 애플리케이션을 사용해야 합니다. 기본 사용자 인증 정보 커스텀 JWT 클레임은 무시됩니다. 이 역할은 신뢰할 수 있는 환경 (고객 백엔드)으로 제한됩니다.
Fleet Engine Delivery 수퍼유저 **(지원 중단됨)**

roles/fleetengine.deliverySuperUser
모든 배송 차량 및 태스크 API에 대한 권한을 부여합니다. 발급된 토큰 일반적으로 백엔드에서 사용됩니다 있습니다
Fleet Engine Delivery Fleet 리더

roles/fleetengine.deliveryFleetReader
배송 차량 및 작업을 읽고 작업을 처리할 수 있습니다. 이 서비스 계정에서 발급된 토큰 역할은 일반적으로 배송 차량 운영자의 웹브라우저에서 사용됩니다.

Google Cloud에서 관리하는 장치를 통해 배달 기사에게 기업 IT 부서에서는 Fleet Engine이 제공하는 유연성을 활용할 수 있습니다. 신뢰할 수 있는 드라이버 사용자 역할이며 Fleet Engine의 일부 또는 전체를 통합하도록 선택 상호작용을 말합니다.

BYOD(Bring Your Own Device) 정책을 지원하는 조직은 안전성을 유지하고, 신뢰할 수 없는 드라이버 사용자 역할의 모바일 앱이 차량 위치 업데이트를 Fleet Engine으로 전송합니다. 기타 모든 항목 상호작용은 고객 백엔드 서버에서 시작되어야 합니다.

드라이버 및 소비자 SDK는 이러한 표준 역할을 중심으로 빌드됩니다. 하지만 커스텀 역할을 만들어 . 드라이버 및 소비자 SDK는 필수 권한이 없습니다. 따라서 모든 광고를 게재할 것을 적극 권장합니다. 맞춤 역할 대신 위에 표시된 표준 역할을 사용합니다.

서비스 계정 만들기

IAM & Admin > Service Accounts를 사용하여 서비스 계정을 만들 수 있습니다. Google Cloud 콘솔의 탭합니다 역할 드롭다운 목록에서 Fleet Engine을 실행하고 역할 중 하나를 서비스 계정에 할당합니다. 좋음 연습을 사용하여 각 역할과 연결된 계정을 나타냅니다. 예를 들어 서비스 계정에 의미 있는 이름을 지정합니다.

편의상 신뢰할 수 없는 클라이언트를 위해 JWT를 발행해야 하는 경우 서비스 계정 토큰 생성자 역할에 할당된 사용자는 gcloud 명령줄 도구 사용

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

여기서 my-user@example.com은 다음 작업에 사용되는 이메일입니다. gcloud (gcloud auth list --format='value(account)')로 인증합니다.

Fleet Engine 인증 라이브러리

Fleet Engine은 JWT를 사용하여 신뢰할 수 없는 Fleet Engine API에 대한 액세스를 제한합니다. 지원합니다 Fleet Engine 인증 라이브러리 사용 가능 GitHub는 빌드하고 안전하게 서명할 수 있습니다

라이브러리의 이점은 다음과 같습니다.

  • Fleet Engine 토큰을 만드는 프로세스를 간소화합니다.
  • 인증 파일 사용 이외의 토큰 서명 메커니즘 (예: 사용할 수 있습니다)

승인을 위한 JSON 웹 토큰 (JWT) 만들기

Fleet Engine 인증 라이브러리를 사용하지 않는 경우 JWT가 코드베이스 내에서 직접 작성됩니다. 이를 위해서는 JWT 및 Fleet Engine과의 관계에 대한 이해 그래서 우리는 Fleet Engine 인증 라이브러리를 활용하는 것이 좋습니다.

Fleet Engine 내에서 JWT는 단기 인증 제공 기기가 특정 목적에 맞는 차량 또는 작업을 확인할 수 있습니다 JWT는 헤더와 클레임 섹션을 포함합니다. header 섹션에는 사용할 비공개 키 (서비스 계정에서 가져옴)와 암호화 알고리즘입니다. 소유권 주장 섹션에는 토큰의 생성 시간, 토큰의 TTL(수명), 토큰이 사용 중인 서비스 액세스 권한 요청 및 범위를 좁히기 위한 기타 승인 정보 액세스 예를 들면 배송 차량 ID가 있습니다.

JWT 헤더 섹션에는 다음 필드가 포함됩니다.

필드설명
alg 사용할 알고리즘입니다. `RS256`
typ 토큰 유형입니다. `JWT`입니다.
kid 서비스 계정의 비공개 키 ID입니다. 이 값은 서비스 계정 JSON 파일의 `private_key_id` 필드에 입력합니다. 올바른 수준의 권한을 가진 서비스 계정의 키를 사용해야 합니다.

JWT 클레임 섹션에는 다음 필드가 포함됩니다.

필드설명
iss 서비스 계정의 이메일 주소입니다.
sub 서비스 계정의 이메일 주소입니다.
aud 서비스 계정의 SERVICE_NAME(이 경우 https://fleetengine.googleapis.com/)
iat 토큰이 생성된 타임스탬프로 경과 시간(초)으로 지정됩니다. 1970년 1월 1일 00:00:00 UTC 이후부터 적용됩니다. 편향은 10분 동안 허용합니다. 만약 타임스탬프가 너무 먼 과거이거나 미래의 경우 서버에서 오류를 보고할 수 있습니다.
exp 토큰이 만료될 때의 타임스탬프로, 경과 시간(초)으로 지정됩니다. 1970년 1월 1일 00:00:00 UTC 이후부터 적용됩니다. 타임스탬프가 다음과 같은 경우 요청은 실패합니다. 표시됩니다.
authorization 사용 사례에 따라 `deliveryvehicleid`, `trackingid`, `taskid` 또는 `taskids`.

JWT 토큰을 발급하는 것은 토큰을 서명하는 것을 의미합니다. 안내 및 코드 샘플 JWT 생성 및 서명에 대한 자세한 내용은 다음을 참조하세요. OAuth를 사용하지 않는 서비스 계정 승인. 그런 다음 발행된 토큰을 gRPC 호출이나 Fleet Engine에 액세스할 수 있습니다

JWT 클레임

라스트 마일 플릿 솔루션은 비공개 클레임을 사용합니다. 비공개 클레임을 사용하면 자신의 데이터에 액세스할 수 있습니다. 예를 들어 백엔드가 배달 기사의 휴대기기에 JSON 웹 토큰을 발급하는 경우 해당 토큰은 운전자의 배달 금액에 대한 deliveryvehicleid 클레임을 포함합니다. 차량 ID입니다. 그런 다음 드라이버 역할에 따라 토큰은 다른 임의의 차량 ID가 아닌 특정 배송 차량 ID입니다.

라스트 마일 플릿 솔루션은 다음과 같은 비공개 클레임을 사용합니다.

  • deliveryvehicleid - 배송 차량별 API를 호출할 때 사용합니다.
  • taskid - 태스크별 API를 호출할 때 사용합니다.
  • taskids - BatchCreateTasksAPI를 호출할 때 사용합니다. 소유권 주장은 배열 형식으로 되어 있으며 배열에는 요청을 완료할 수 있습니다 delivervehicleid, trackingid 또는 소유권 주장 taskid
  • trackingid - GetTaskTrackingInfoAPI를 호출할 때 사용합니다. 소유권 주장은 요청의 추적 ID와 일치해야 합니다. delivervehicleid, taskid 또는 taskids 소유권 주장

API를 호출할 때 토큰에는 적절한 클레임도 포함되어야 합니다. 백엔드 서버에서 가져올 수 있지만 별표의 특수 값을 사용하여 deliveryvehicleid, taskid, trackingid 클레임의 경우 ('*') 별표 ('*')도 taskids 클레임에서 사용할 수 있지만 이 요소가 유일한 요소여야 합니다. 입니다.

JSON을 토큰 Bearer로 직접 만들고 서명하려는 경우 사용하려면 OAuth를 사용하지 않는 서비스 계정 승인 ID 개발자 문서를 참조하세요.

gRPC 호출에 토큰을 연결하는 메커니즘은 언어에 따라 다릅니다. 호출하기 위해 사용되는 프레임워크입니다. 토큰을 지정하는 메커니즘 Bearer 토큰과 함께 승인 헤더를 포함하는 것입니다. 개별 ID에 대한 승인 메모에 나와 있는 것처럼 배송 추적 또는 Fleet 성능 사용할 수 있습니다

다음 예시는 백엔드 서버:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }

다음 예시는 백엔드 서버:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }

다음 예시는 백엔드 서버:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }

다음 예시는 최종 사용자 고객의 토큰을 보여줍니다.

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

다음 예는 드라이버 앱의 토큰을 보여줍니다.

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }
  • 헤더의 kid 필드에 서비스 계정의 비공개 키 ID를 가져올 수 있습니다. 이 값은private_key_id 서비스 계정 JSON 파일을 작성할 수 있습니다
  • isssub 필드에 서비스 계정의 이메일 주소를 지정합니다. 서비스 계정의 client_email 필드에서 이 값을 찾을 수 있습니다. JSON 파일입니다.
  • aud 필드에 https://SERVICE_NAME/을 지정합니다.
  • iat 필드에 토큰이 생성된 타임스탬프를 지정합니다. 1970년 1월 1일 00:00:00 UTC 이후 경과된 시간(초)입니다. 10분 허용 지정할 수 있습니다 타임스탬프가 너무 먼 과거이거나 미래인 경우 서버에서 오류를 보고할 수 있습니다.
  • exp 필드에 토큰이 만료되는 타임스탬프를 지정합니다. 1970년 1월 1일 00:00:00 UTC 이후의 초 단위입니다. 권장값 = iat + 3600입니다.

휴대기기 또는 최종 사용자에게 전달할 토큰에 서명할 때는 드라이버 또는 소비자 역할에 사용자 인증 정보 파일을 사용할 수 있습니다. 그렇지 않으면 모바일 장치 또는 최종 사용자가 정보를 제공해서는 안 됩니다.