S3SignerAWS

codecov Build Status CircleCI Codacy Badge Swift 5.0

为验证 AWS S3 REST API 调用生成 V4 授权标头和预签名 URL

如果您正在使用 Vapor,请查看 VaporS3Signer

特性

目录

集成

Swift 包管理器

要使用 Swift 包管理器安装,请将包添加到您的 Package.swift 文件中

Import PackageDescription

  let package = Package(
    name: "Your_Project_Name",
    targets: [],
    dependencies: [
        .package(url: "https://github.com/JustinM1/S3SignerAWS.git", from: "4.0.0")
    ]
  )  

用法

关于负载的说明

请求可以具有签名负载或未签名负载。

要开始使用 S3SignerAWS 类,请初始化一个类似于下面示例的实例

let s3Signer = S3SignerAWS(accessKey: "YOUR_AWS_PUBLIC_KEY", secretKey: "YOUR_AWS_SECRET_KEY", region: .usStandard_usEast1)  

注意 - 出于安全原因,建议在客户端上硬编码密钥。

V4 授权标头

对于 V4 授权标头和预签名 URL,您可以根据您的特定用例添加其他标头。

GET

do {
  guard let url = URL(string: "https://s3.amazonaws.com/bucketName/testUploadImage.png") else { throw someError }
  let headers = try s3Signer.authHeaderV4(httpMethod: .get, urlString: url.absoluteString, headers: [:], payload: .none)          
  var request = URLRequest(url: url)
  request.httpMethod = HTTPMethod.get.rawValue
  headers.forEach { request.setValue($0.key, forHTTPHeaderField: $0.value) }
      // make network request
    } catch {
      //handle error
    }
  }

PUT

do {
  let bytesObject = try someDataObject.makeBytes()
  guard let url = URL(string: "https://s3.amazonaws.com/bucketName/testUploadImage.png") else { throw someError }
  let headers = try s3Signer.authHeadersV4(httpMethod: .put, urlString: url.absoluteString, headers: [:], payload: .bytes(bytesObject))
  var request = URLRequest(url: url)
  request.httpMethod = HTTPMethod.put.rawValue
  request.httpBody = Data(bytes: bytesObject)
  headers.forEach { request.setValue($0.key, forHTTPHeaderField: $0.value) }
      // make network request
    } catch {
    //handle error
    }
  }

DELETE

do {
  guard let url = URL(string: "https://s3.amazonaws.com/bucketName/testUploadImage.png") else { throw someError }
  let headers = try s3Signer.authHeadersV4(httpMethod: .delete, urlString: url.absoluteString, headers: [:], payload: .none)
  var request = URLRequest(url: url)
  request.httpMethod = HTTPMethod.delete.rawValue
  headers.forEach { request.setValue($0.key, forHTTPHeaderField: $0.value) }
      // make network request
    } catch {
      //handle error
    }
  }

V4 预签名 URL

与生成身份验证标头一样简单,要生成预签名 URL

let presignedURL = signer.presignedURLV4(httpMethod: HTTPMethod, urlString: String, expiration: TimeFromNow, headers: [String: String]) -> String