TDOAuth
示例
要运行示例项目,请克隆仓库,然后首先从 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 文件。