TDOAuth 1.6.3

TDOAuth 1.6.3

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布上次发布2022年11月

Max HowellAdam KaplanDavid GrandinettiDavid GrandinettiScott Tury维护。



TDOAuth 1.6.3

  • 作者
  • Adam Kaplan 和 Max Howell

TDOAuth

CI Status Swift Package Manager compatible Version License Platform

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install 命令。

要求

Swift 4、4.2 或 5。纯 Swift subspec 没有依赖项。

安装

CocoaPods

TDOAuth 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中

pod 'TDOAuth'

SwiftPM

.package(url: "https://github.com/yahoo/TDOAuth.git", from: "1.6.0") 添加到您的 package.swift

Swift用法

单腿 OAuth (客户端 & 服务器端)

单腿 OAuth 的两腿是客户端和服务器。此方法适于验证经过授权的第一方访问。如果您只有消费者密钥和消费者密钥,您将使用此方法

let consumerSecret = "my-consumer-secret"
let consumerKey = "my-consmer-key"

/// Generate our OAuth1 signer
let oauth1: OAuth1<HMACSigner> = {
    let secrets = SharedSecrets(consumerSecret: consumerSecret)
    let sha1Signer = HMACSigner(algorithm: .sha1, material: secrets)
    return OAuth1(withConsumerKey: consumerKey, signer: sha1Signer)
}()

/// Feed requests into our OAuth1 signer to produce signed versions of those requests.
/// The only modificataion to the provided request is setting the Authorization HTTP header.
func signRequest(_ request: URLRequest) -> URLRequest? {
    return oauth1.sign(request: request)
}

三腿 OAuth (客户端、服务器 & 第三方)

三腿 OAuth 是一种适用于验证第三方访问用户数据的版本。此方法引入了第三方的第二组密钥和密钥

let consumerSecret = "my-consumer-secret"
let consumerKey = "my-consmer-key"
let accessToken: String? = "access-token"
let accessTokenSecret: String? = "token-secret"


/// Generate our OAuth1 signer
let oauth1: OAuth1<HMACSigner> = {
    let secrets = SharedSecrets(consumerSecret: consumerSecret, accessTokenSecret: accessTokenSecret)
    let sha1Signer = HMACSigner(algorithm: .sha1, material: secrets)
    return OAuth1(withConsumerKey: consumerKey, accessToken: accessToken, signer: sha1Signer)
}()

/// Feed requests into our OAuth1 signer to produce signed versions of those requests.
/// The only modificataion to the provided request is setting the Authorization HTTP header.
func signRequest(_ request: URLRequest) -> URLRequest? {
    return oauth1.sign(request: request)
}

签名方法

在上面的例子中,我们使用 SHA-1 HMAC 来生成签名。由于 SHA-1 现在非常脆弱,您可能想使用更安全的散列算法。TDOAuth 默认支持更安全的 SHA-2 签名,以及任意签名(自行选择算法)。

支持的 SHA-2 变体

  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

SHA-256 示例

let signer: OAuth1<HMACSigner> = HMACSigner(algorithm: .sha256, material: secrets)

纯文本签名

纯文本签名主要用于调试或通过严格固定的SSL连接使用。密钥没有任何安全措施,因此不推荐在没有固定SSL的情况下使用此策略。

纯文本签名示例

let signer: OAuth1<PlaintextSigner> = PlaintextSigner(keyMaterial: secrets)

自定义签名

要提供自己的自定义签名,实现OAuth1Signer协议

public protocol OAuth1Signer {

    associatedtype KeyMaterial

    var signatureMethod: String { get }

    init(keyMaterial: KeyMaterial)

    func sign(_ value: String) -> String
}

例如,简单示例请参考PlaintextSigner.swift中的实现。

用法(遗留Objective-C)

不推荐使用Objective-C API。它为了与旧的TDOAuth Obj-C API保持向后兼容而提供。虽然底层代码与上述Swift代码恰好相同,但遗留的TDOAuth API在请求方面施加了重大意见,并且在新的兼容性API中复制了这些意见。例如,会自动生成并添加到请求中的User-Agent头。对POST和表单数据处理的注意事项和边缘情况很多。

尽管Swift API只需对其提供的URLRequest进行签名,但Objective-C API在签名过程中会为您生成一个新的NSURLRequest。因此,您可能需要仔细修改返回的请求实例以适应您的需求(确保不要破坏签名)。

使用Swift API!

Objective-C API示例

@import TDOAuth;

NSURLRequest * request = [TDOAuth URLRequestForPath:@"/v1/service/name"
                         parameters:@{ "count": @10, "format": "json" }
                               host:@"api.example.com"
                        consumerKey:@"my-consumer-key"
                     consumerSecret:@"my-consumer-secret"
                        accessToken:@"my-token"
                        tokenSecret:@"my-token-secret"
                             scheme:@"https"
                      requestMethod:@"GET"
                       dataEncoding:TDOAuthContentTypeUrlEncodedForm
                       headerValues:@{ "Accept": "application/json" }
                    signatureMethod:TDOAuthSignatureMethodHmacSha1;

作者

Adam Kaplan,[email protected]

许可证

TDOAuth 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。