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

상속:
객체
  • 객체
모두 표시
다음에 정의됨:
lib/ Mongo/auth/ Amazon Web Services/ 요청.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:, 호스팅하다:, server_nonce:, session_token: nil, 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



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 51

def 초기화(access_key_id:, secret_access_key:, 호스트:, server_nonce:, session_token: nil, 시간: 시간.지금)
  @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}")
    올리다 오류::InvalidServerAuthResponse, "'#{arg}'의 값은 필수" 만약 value.nil? || value.비어 있나요?
  end

  반환 하지 않는 한 호스트 && 호스트.분량 > 255

  올리다 오류::InvalidServerAuthHost, "' 호스팅하다'의 값이 너무 깁니다: #{@ 호스팅하다}"
end

인스턴스 속성 세부 정보

#access_key_idstring (읽기 전용)

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

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

반환합니다:

  • (string)

    access_key_id 액세스 키 ID입니다.

이후:

  • 2.0.0



70
71
72
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 70

def access_key_id
  @access_key_id
end

#호스트string (읽기 전용)

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

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

반환합니다:

  • (string)

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

이후:

  • 2.0.0



80
81
82
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 80

def 호스트
  @host
end

#secret_access_keystring (읽기 전용)

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

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

반환합니다:

  • (string)

    secret_access_key 비밀 액세스 키입니다.

이후:

  • 2.0.0



73
74
75
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 73

def secret_access_key
  @secret_access_key
end

#server_noncestring (읽기 전용)

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

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

반환합니다:

  • (string)

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

이후:

  • 2.0.0



83
84
85
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 83

def server_nonce
  @server_nonce
end

#session_tokenstring (읽기 전용)

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

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

반환합니다:

  • (string)

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

이후:

  • 2.0.0



77
78
79
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 77

def session_token
  @session_token
end

#time시간 (읽기 전용)

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

시간을 요청 합니다.

반환합니다:

  • (시간)

    time 요청 시간입니다.

이후:

  • 2.0.0



86
87
88
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 86

def 시간
  @time
end

인스턴스 메서드 세부 정보

#권한 부여string

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

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

반환합니다:

  • (string)

    권한 부여 헤더 값입니다.

이후:

  • 2.0.0



220
221
222
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 220

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



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 181

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



95
96
97
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 95

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



90
91
92
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 90

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

headers #개 ⇒ <Hash>

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

참고:

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

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

반환합니다:

  • (<Hash>)

    headers 헤더입니다.

이후:

  • 2.0.0



134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 134

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).삭제("\n"),
  }
  headers['x-amz-security-token'] = session_token 만약 session_token
  headers
end

#headers_to_sign<Hash>

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

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

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

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

반환합니다:

  • (<Hash>)

    headers 헤더입니다.

이후:

  • 2.0.0



160
161
162
163
164
165
166
167
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 160

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



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 100

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

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

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

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

#범위string

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

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

반환합니다:

  • (string)

    범위.

이후:

  • 2.0.0



122
123
124
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 122

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

#서명string

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

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

반환합니다:

  • (string)

    서명.

이후:

  • 2.0.0



201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 201

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



173
174
175
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 173

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

#validate!Hash

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

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

반환합니다:

  • (해시)

    GetCallerIdentity 결과입니다.

이후:

  • 2.0.0



228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
# File 'lib/ Mongo/auth/ Amazon Web Services/ 요청.rb', 줄 228

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