Android clientId (no client_secret) का उपयोग करके मुझे निम्नलिखित त्रुटि प्रतिक्रिया मिल रही थी:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
मुझे 'code_verifier' फ़ील्ड के लिए कोई दस्तावेज़ नहीं मिल रहा है, लेकिन मुझे पता चला कि यदि आपने इसे प्राधिकरण और टोकन अनुरोधों में समान मानों पर सेट किया है तो यह इस त्रुटि को दूर कर देगा। मुझे यकीन नहीं है कि इच्छित मूल्य क्या होना चाहिए या अगर यह सुरक्षित होना चाहिए। इसकी कुछ न्यूनतम लंबाई (16 अक्षर) है, लेकिन मुझे null
काम करने के लिए सेटिंग भी मिली ।
मैं अपने एंड्रॉइड क्लाइंट में प्राधिकरण अनुरोध के लिए AppAuth का उपयोग कर रहा हूं जिसमें एक 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();