gpt4 book ai didi

java - 在服务器端验证 token 时获得无效授权、格式错误的授权代码

转载 作者:行者123 更新时间:2023-11-30 10:18:22 24 4
gpt4 key购买 nike

我们正在尝试在我们的产品中使用 Google OAuth。流程是让客户端从用户那里获得授权并将 token 发送到服务器。在服务器端,我需要验证 token 是否有效。目前,我使用谷歌提供的 OAuth2Sample 作为客户端。当我在服务器端验证发送的 token 时,出现以下异常:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request

{
"error" : "invalid_grant",
"error_description" : "Malformed auth code."
}

at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)

at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158)

服务器端代码如下:

GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
new NetHttpTransport(),
JacksonFactory.getDefaultInstance(),
"https://www.googleapis.com/oauth2/v4/token",

CLIENT_ID,
CLIENT_SECRET,

authToken, //Sent from the client
"") // specify an empty string if you do not have redirect URL
.execute();

这是我在客户端获取访问 token 的方式:

private static final List<String> SCOPES = Arrays.asList(
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email");
//...

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JSON_FACTORY,
clientSecrets, //Client ID and Client Secret
SCOPES).setDataStoreFactory(
dataStoreFactory).build();

LocalServerReceiver lsr = new LocalServerReceiver();
Credential cr = new AuthorizationCodeInstalledApp(flow, lsr).authorize("user");
return cr.getAccessToken(); //send this to server for verification

token 在去往服务器的途中没有损坏,它是:

ya29.Glx_BUjV_zIiDzq0oYMqoXkxz8VGzt8GCQuBiaaJ3FxN0qaLxbBXvnWXjNKZbpeu4jraoEqw6Mj9D7LpTx_8Ts_8TH0VGT5cbrooGcAOF0wKMc1DDEjm6p5m-MvtFA

如果我尝试从客户端访问个人资料和电子邮件,它工作正常。相同的 token 在服务器端不起作用得到格式错误的 token 异常。

最佳答案

我正在使用 Node.js googleapis 客户端库,这是我的案例:

url hash 片段中的授权码是由encodeURIComponent api 编码的,所以如果你传递这个代码来请求access token。它会抛出一个错误:

{ "error": "invalid_grant", "error_description": "格式错误的授权码。"}

所以我使用decodeURIComponent来解码授权码。

decodeURIComponent('4%2F_QCXwy-PG5Ub_JTiL7ULaCVb6K-Jsv45c7TPqPsG2-sCPYMTseEtqHWcU_ynqWQJB3Vuw5Ad1etoWqNPBaGvGHY')

解码后授权码为:

"4/_QCXwy-PG5Ub_JTiL7ULaCVb6K-Jsv45c7TPqPsG2-sCPYMTseEtqHWcU_ynqWQJB3Vuw5Ad1etoWqNPBaGvGHY"

在 Java 中,也许你可以使用 URLDecoder.decode 处理代码。

关于java - 在服务器端验证 token 时获得无效授权、格式错误的授权代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com