Sử dụng ứng dụng khách Android (không có client_secret) Tôi nhận được phản hồi lỗi sau:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
Tôi không thể tìm thấy bất kỳ tài liệu nào cho trường 'code_verifier' nhưng tôi đã phát hiện ra nếu bạn đặt nó thành các giá trị bằng nhau trong cả yêu cầu ủy quyền và mã thông báo, nó sẽ xóa lỗi này. Tôi không chắc giá trị dự định là gì hoặc nếu nó phải an toàn. Nó có một số độ dài tối thiểu (16 ký tự) nhưng tôi thấy cài đặt null
cũng hoạt động.
Tôi đang sử dụng AppAuth cho yêu cầu cấp phép trong ứng dụng khách Android có setCodeVerifier()
chức năng.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Dưới đây là một ví dụ yêu cầu mã thông báo trong nút:
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);
}
);
Tôi đã thử nghiệm và điều này hoạt động với cả https://www.googleapis.com/oauth2/v4/token
và https://accounts.google.com/o/oauth2/token
.
Nếu bạn đang sử dụng GoogleAuthorizationCodeTokenRequest
thay thế:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();