我为此感到挣扎。为了获得令牌,我必须提交我用来创建代码挑战的代码验证程序,该代码验证程序先前已提交给服务器。服务器始终响应,我提交了错误的代码验证器。所以我的方法在整个SHA256事物上肯定是错误的,但是我从未做过。你能告诉我我的方法有什么问题吗?手册说:
应用程序生成了代码验证程序后,便会使用它来创建 代码挑战。对于可以执行SHA256哈希的设备, 代码质询是SHA256哈希的BASE64-URL编码的字符串 代码验证器。没有能力执行 允许SHA256哈希将纯代码验证程序字符串用作 挑战。
- (NSString *)createCodeChallengeWithVerifier:(NSString *)codeVerifier {
//Create ASCII
const char *asciiString = [codeVerifier cStringUsingEncoding:NSASCIIStringEncoding];
//Sha256
unsigned char buf[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(asciiString, strlen(asciiString), buf);
NSMutableString * shaString = [NSMutableString stringWithCapacity:(CC_SHA256_DIGEST_LENGTH * 2)];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; ++i) {
[shaString appendFormat:@"%02x", buf[i]];
}
//Base 64 encode
NSData *dataFromShaString = [shaString dataUsingEncoding:NSUTF8StringEncoding];
return([dataFromShaString base64EncodedStringWithOptions:0]);
}