การใช้ไคลเอนต์ Android (ไม่มี client_secret) ฉันได้รับการตอบสนองข้อผิดพลาดต่อไปนี้:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
ฉันไม่พบเอกสารใด ๆ สำหรับฟิลด์ 'code_verifier' แต่ฉันพบว่าหากคุณตั้งค่าให้เท่ากันทั้งในคำขอการอนุญาตและโทเค็นมันจะลบข้อผิดพลาดนี้ ฉันไม่แน่ใจว่าค่าที่ตั้งใจไว้ควรเป็นเท่าใดหรือควรจะปลอดภัย มีความยาวขั้นต่ำ (16? อักขระ) แต่ฉันพบว่าการตั้งค่าnull
ยังใช้งานได้
ฉันใช้ AppAuth สำหรับคำขอการอนุญาตในไคลเอนต์ Android ของฉันซึ่งมีsetCodeVerifier()
ฟังก์ชัน
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
นี่คือตัวอย่างคำขอโทเค็นในโหนด:
request.post(
'https://www.googleapis.com/oauth2/v4/token',
{ form: {
'code': '4/xxxxxxxxxxxxxxxxxxxx',
'code_verifier': null,
'client_id': 'xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
'client_secret': null,
'redirect_uri': 'com.domain.app:/oauth2redirect',
'grant_type': 'authorization_code'
} },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('Success!');
} else {
console.log(response.statusCode + ' ' + error);
}
console.log(body);
}
);
ฉันทดสอบแล้วและใช้ได้กับทั้งสองอย่างhttps://www.googleapis.com/oauth2/v4/token
และhttps://accounts.google.com/o/oauth2/token
.
หากคุณใช้GoogleAuthorizationCodeTokenRequest
แทน:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();