클래스: Mongo::Auth::Aws::Request Private

상속:
객체
  • 객체
모두 표시
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services 요청 작업을 위한 헬퍼 클래스입니다.

이 클래스의 주요 목적은 표준 Amazon Web Services STS 요청을 생성하고 이에 대한 서명된 헤더와 서명을 계산하는 것입니다.

이후:

  • 2.0.0

상수 요약 접기

STS_REQUEST_BODY =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

STS GetCallerIdentity 요청 의 본문입니다.

이는 현재 이 클래스가 만들기를 지원하는 유일한 요청 입니다.

이후:

  • 2.0.0

"Action=GetCallerIdentity&Version=2011-06-15".동결
VALIDATE_TIMEOUT =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

STS를 통해 자격 증명 의 유효성을 검사하는 데 사용할 제한 시간(초)입니다.

이후:

  • 2.0.0

10

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

생성자 세부 정보

#initialize(access_key_id:, secret_access_key:, session_token: nil, 호스팅하다:, server_nonce:, time: Time.now) ⇒ 요청

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

시간을 재정의하면 재현 가능한 요청(즉, 요청 재생)을 생성할 수 있습니다.

요청 을 구성합니다.

매개변수:

  • access_key_id (string)

    액세스 키 ID입니다.

  • secret_access_key (string)

    비밀 액세스 키입니다.

  • session_token (string) (기본값: nil)

    임시 자격 증명에 대한 세션 토큰입니다.

  • 호스트 (string)

    사용할 호스트 HTTP 헤더의 값입니다.

  • server_nonce (string)

    서버 논스 바이너리 string 입니다.

  • 시간 (시간) (기본값: Time.now)

    요청 시간입니다.

이후:

  • 2.0.0



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 54

def 초기화(access_key_id:, secret_access_key:, session_token: nil,
  호스트:, server_nonce:, 시간: 시간.지금
)
  @access_key_id = access_key_id
  @secret_access_key = secret_access_key
  @session_token = session_token
  @host = 호스트
  @server_nonce = server_nonce
  @time = 시간

  %i(access_key_id secret_access_key 호스트 server_nonce). do |arg|
    value = instance_variable_get("@#{arg}")
    만약 value.nil? || value.비어 있나요?
      올리다 오류::InvalidServerAuthResponse, "'#{arg}'의 값은 필수"
    end
  end

  만약 호스트 && 호스트.분량 > 255
      올리다 오류::InvalidServerAuthHost, "' 호스팅하다'의 값이 너무 깁니다: #{@ 호스팅하다}"
  end
end

인스턴스 속성 세부 정보

#access_key_idstring (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환값 access_key_id 액세스 키 ID입니다.

반환합니다:

  • (string)

    access_key_id 액세스 키 ID입니다.

이후:

  • 2.0.0



77
78
79
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 77

def access_key_id
  @access_key_id
end

#호스트string (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

호스팅하다 사용할 호스트 HTTP 헤더의 값을 반환합니다.

반환합니다:

  • (string)

    호스팅하다 사용할 호스트 HTTP 헤더의 값입니다.

이후:

  • 2.0.0



87
88
89
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 87

def 호스트
  @host
end

#secret_access_keystring (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

secret_access_key 시크릿 액세스 키를 반환합니다.

반환합니다:

  • (string)

    secret_access_key 비밀 액세스 키입니다.

이후:

  • 2.0.0



80
81
82
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 80

def secret_access_key
  @secret_access_key
end

#server_noncestring (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환값 server_nonce 서버 논스 바이너리 string 입니다.

반환합니다:

  • (string)

    server_nonce 서버 논스 바이너리 string 입니다.

이후:

  • 2.0.0



90
91
92
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 90

def server_nonce
  @server_nonce
end

#session_tokenstring (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환값 session_token 임시 자격 증명 에 대한 세션 토큰입니다.

반환합니다:

  • (string)

    session_token 임시 자격 증명 에 대한 세션 토큰입니다.

이후:

  • 2.0.0



84
85
86
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 84

def session_token
  @session_token
end

#time시간 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

시간을 요청 합니다.

반환합니다:

  • (시간)

    time 요청 시간입니다.

이후:

  • 2.0.0



93
94
95
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 93

def 시간
  @time
end

인스턴스 메서드 세부 정보

#권한 부여string

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services 서명 V4 사양에 따라 권한 부여 헤더의 값을 반환합니다.

반환합니다:

  • (string)

    권한 부여 헤더 값입니다.

이후:

  • 2.0.0



235
236
237
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 235

def 권한 부여
  "Amazon Web Services4-HMAC-SHA256 Credential=#{access_key_id}/#{scope}, SignedHeaders=#{wired_headers_string}, Signature=#{서명}"
end

#canonical_requeststring

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services V4 서명을 계산하는 동안 사용된 표준 요청을 반환합니다.

반환합니다:

  • (string)

    표준 요청입니다.

이후:

  • 2.0.0



196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 196

def canonical_request
  headers = headers_to_sign
  serialized_headers = headers.map do |k, v|
    "#{k}:#{v}"
  end.가입("\n")
  해시된 페이로드 = 다이제스트::SHA256.신규.update(STS_REQUEST_BODY).hexdigest
  "POST\n/\n\n" +
    # 직렬화된 헤더 뒤에 두 개의 개행 문자가 있습니다.
    # 서명 V4 사양은 각 헤더를 다음을 포함하는 것으로 취급합니다.
    # 개행을 종료하고 추가 개행이 있습니다.
    # 헤더와 서명된 헤더 이름을 구분합니다.
    "#{serialized_headers}\n\n" +
    "#{signed_headers_string}\n" +
    해시된 페이로드
end

#formatted_datestring

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

formatted_date YYYYMMDD 형식의 요청 날짜를 반환합니다.

반환합니다:

  • (string)

    formatted_date YYYYMMDD 형식의 요청 날짜입니다.

이후:

  • 2.0.0



102
103
104
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 102

def formatted_date
  formatted_time[0, 8]
end

#formatted_timestring

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

X-Amz-Date 헤더에 사용되는 것처럼 요청 의 formatted_time ISO8601-형식이 지정된 시간을 반환합니다.

반환합니다:

  • (string)

    formatted_time ISO8601-X-Amz-Date 헤더에 사용되는 요청의 형식이 지정된 시간입니다.

이후:

  • 2.0.0



97
98
99
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 97

def formatted_time
  @formatted_time ||= @time.getutc.strftime('%Y%m%dT%H%M%SZ')
end

headers #개 ⇒ <Hash>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이러한 헤더가 모두 서명된 헤더 목록의 일부인 것은 아니며, 해시의 키가 반드시 사전순으로 정렬되는 것은 아니며, 키는 어떤 경우에도 포함될 수 있습니다.

계산된 표준 요청 의 헤더가 포함된 해시를 반환합니다.

반환합니다:

  • (<Hash>)

    headers 헤더입니다.

이후:

  • 2.0.0



147
148
149
150
151
152
153
154
155
156
157
158
159
160
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 147

def headers
  headers = {
    '콘텐츠 길이' => STS_REQUEST_BODY.분량.to_s,
    'content-type' => '애플리케이션/x-www-form-urlencoding',
    '호스팅하다' => 호스트,
    'x-amz-date' => formatted_time,
    'x-mongodb-gs2-cb-flag' => 'n',
    'x-mongodb-server-nonce' => Base64.인코딩64(server_nonce).gsub("\n", ''),
  }
  만약 session_token
    headers['x-amz-security-token'] = session_token
  end
  headers
end

#headers_to_sign<Hash>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서명해야 하는 계산된 표준 요청의 헤더가 포함된 해시를 서명 준비된 형식으로 반환합니다.

#headers와 이 메서드의 차이점은 다음과 같습니다.

  • 서명하지 않을 헤더를 모두 제거합니다. Amazon Web Services 사양에 따라 모든 헤더에 서명할 수 있어야 하지만, MongoDB 서버 는 일부 헤더만 서명할 것으로 예상하며 다른 헤더에 서명하면 올바른 요청 을 구성하지 않습니다.

  • 모든 헤더 이름을 소문자로 설정합니다.

  • 해시에서 헤더를 사전순으로 정렬합니다.

반환합니다:

  • (<Hash>)

    headers 헤더입니다.

이후:

  • 2.0.0



175
176
177
178
179
180
181
182
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 175

def headers_to_sign
  headers_to_sign = {}
  headers..sort_by { |k| k.downcase }. do ||
    write_key = .downcase
    headers_to_sign[write_key] = headers[]
  end
  headers_to_sign
end

#리전string

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

리전 호스트에서 파생된 호스트의 리전을 반환합니다.

반환합니다:

  • (string)

    리전 호스팅하다 에서 파생된 호스팅하다 의 리전 입니다.

이후:

  • 2.0.0



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 107

def 리전
  # 일반적인 경우
  만약 호스트 == 'sts.amazonaws.com'
    반환 'us-east-1'
  end

  만약 호스트.start_with?('.')
    올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 시작합니다: #{호스팅하다}"
  end
  만약 호스트.end_with?('.')
    올리다 오류::InvalidServerAuthHost, "호스트는 마침표로 끝납니다: #{host}"
  end

  부품 = 호스트.split('.')
  만약 부품.어떤? { |부분| 부분.비어 있나요? }
    올리다 오류::InvalidServerAuthHost, "호스트에 빈 구성 요소가 있습니다: #{호스팅하다}"
  end

  만약 부품.분량 == 1
    'us-east-1'
  other
    부품[1]
  end
end

#범위string

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services 서명 V4 사양에 따라 요청 의 범위를 반환합니다.

반환합니다:

  • (string)

    범위.

이후:

  • 2.0.0



135
136
137
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 135

def 범위
  "#{formatted_date}/#{리전}/sts/Amazon Web Services4_request"
end

#서명string

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services 서명 V4 사양에 따라 표준 요청 의 계산된 서명을 반환합니다.

반환합니다:

  • (string)

    서명.

이후:

  • 2.0.0



216
217
218
219
220
221
222
223
224
225
226
227
228
229
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 216

def 서명
  hashed_canonical_request = 다이제스트::SHA256.hexdigest(canonical_request)
  string_to_sign = "Amazon Web Services4-HMAC-SHA256\n" +
    "#{formatted_time}\n" +
    "#{범위}\n" +
    hashed_canonical_request
  # 모든 중간 HMAC 작업은 16진수로 인코딩되지 않습니다.
  Mac = hmac("Amazon Web Services4#{secret_access_key}", formatted_date)
  Mac = hmac(Mac, 리전)
  Mac = hmac(Mac, 'sts')
  Signing_key = hmac(Mac, 'Amazon Web Services4_request')
  # 최종 HMAC 연산만 16진수로 인코딩됩니다.
  hmac_hex(Signing_key, string_to_sign)
end

#signed_headers_stringstring

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Amazon Web Services 서명 V4 사양에 따라 서명된 헤더의 이름을 세미콜론으로 구분한 목록을 반환합니다.

반환합니다:

  • (string)

    서명된 헤더 목록입니다.

이후:

  • 2.0.0



188
189
190
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 188

def Signed_headers_string
  headers_to_sign..가입(';')
end

#validate!Hash

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

실제 STS GetCallerIdentity 요청 을 전송하여 자격 증명 과 구성된 요청 구성 요소의 유효성을 검사합니다.

반환합니다:

  • (해시)

    GetCallerIdentity 결과입니다.

이후:

  • 2.0.0



243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
# 파일 'build/ruby-driver-v2.19/lib/mongo/auth/Amazon Web Services/request.rb', 줄 243

def 유효성을 검사합니다!
  sts_request = Net::HTTP::post.신규("https://#{호스팅하다}"). do |req|
    headers. do |k, v|
      req[k] = v
    end
    req['권한 부여'] = 권한 부여
    req['accept'] = '애플리케이션/JSON'
    req.body = STS_REQUEST_BODY
  end
  HTTP = Net::HTTP.신규(호스트, 443)
  HTTP.use_ssl = true
  HTTP.시작하기 do
    resp = 시간 초과.타임아웃(VALIDATE_TIMEOUT, 오류::CredentialCheckError, 'GetCallerIdentity 요청 시간 초과') do
      HTTP.요청(sts_request)
    end
    Payload = JSON.parse(resp.body)
    만약 resp.코드 != '200'
      aws_code = Payload.가져오기('오류').가져오기('Code')
      aws_message = Payload.가져오기('오류').가져오기('메시지')
      msg = "사용자 #{access_key_id}에 대한 자격 증명 확인 이 HTTP 상태 코드 #{resp.code}: #{aws_code}: #{aws_message} }로 인해 실패했습니다. "
      msg += '.' 하지 않는 한 msg.end_with?('.')
      msg += " 자격 증명 이 유효한지, 자격 증명이 임시인 경우(예: 세션 토큰 사용) 세션 토큰이 제공되었으며 만료되지 않았는지 확인하세요. "
      올리다 오류::CredentialCheckError, msg
    end
    Payload.가져오기('GetCallerIdentityResponse').가져오기('GetCallerIdentityResult')
  end
end