我正在尝试在我的应用程序中为 Swift 2制作OAuth模块.我坚持使用HMAC-SHA1签名生成,因为我的函数返回错误的base64 hmac-sha1进行签名.你能帮帮我吗?怎么了? func URLEncodedKey() - String? { let ke
func URLEncodedKey() -> String? { let key = "efgh" let string = "GET&http%3A%2F%2Fhost.net%2Fresource&name%3Dvalue%26name%3Dvalue%26oauth_consumer_key%3Dabcd%26oauth_nonce%3DxUwWEy3LVsI%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1441375089%26oauth_token%3Dijkl%26oauth_version%3D1.0" guard let keyData = key.dataUsingEncoding(NSUTF8StringEncoding), stringData = string.dataUsingEncoding(NSUTF8StringEncoding), outputData = NSMutableData(length: Int(CC_SHA1_DIGEST_LENGTH)) else { return nil } outputData.length = Int(CC_SHA1_DIGEST_LENGTH) CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), keyData.bytes, keyData.length, stringData.bytes, stringData.length, outputData.mutableBytes) return outputData .base64EncodedStringWithOptions([]) }
用于检查:
String for encode: in code Correct: O8UjUTYX1UxKF93KaY/mta9HETs= My (incorrect): f5elSONqP6nPdpgBIyroJTCN19s=
正确的编码器在这里(javascript):https://oauth.googlecode.com/svn/code/javascript/example/signature.html
您的方法必须按原样返回正确的结果.见http://oauth.net/core/1.0/#signing_process:
The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] where the Signature Base String is the text and the
key
is the concatenated values (each first encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an ‘&’ character (ASCII code 38) even if empty.
在这种情况下,关键应该是“efgh& mnop”.