gpt4 book ai didi

authentication - 使用 GoogleAuth.grantOfflineAccess 在服务器上进行身份验证时出现 Redirect_URI 错误

转载 作者:行者123 更新时间:2023-12-04 01:48:32 25 4
gpt4 key购买 nike

我正在尝试使用 https://developers.google.com/identity/sign-in/web/server-side-flow 中概述的授权流程.
我已经按照指示创建了凭据......没有指定授权重定向 URI,如文档所示:“授权重定向 URI 字段不需要值。重定向 URI 不与 JavaScript API 一起使用。”

启动授权的代码是:
客户端按钮和回调:

<script>
$('#signinButton').click(function() {


var auth2 = gapi.auth2.getAuthInstance();
auth2.grantOfflineAccess().then(signInCallback);

});
function signInCallback(authResult) {

console.log('sending to server');

if (authResult['code']) {

// Send the code to the server
$.ajax({
type: 'POST',
url: 'CheckAuth',

headers: {
'X-Requested-With': 'XMLHttpRequest'
},
contentType: 'application/octet-stream; charset=utf-8',
success: function(result) {
// Handle or verify the server response.
},
processData: false,
data: authResult['code']
});
} else {
// There was an error.
}
}
</script>

服务器端(CheckAuth 方法从身份验证代码创建凭据,它通过 javascript 回调正确接收):
private Credential authorize() throws Exception {
// load client secrets
InputStream is = new FileInputStream(clientSecretsPath_);
InputStreamReader isr = new InputStreamReader(is);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, isr);



String redirect_URI = "";
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
httpTransport, JSON_FACTORY,
"https://www.googleapis.com/oauth2/v4/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
token_,
redirect_URI)
.execute();

String accessToken = tokenResponse.getAccessToken();

// Use access token to call API
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
return credential;

}

流程正常工作,直到我的服务器尝试交换 token 响应的授权代码 (GoogleAuthorizationCodeTokenRequest.execute() )...身份验证服务器返回:
400 Bad Request
{
"error" : "invalid_request",
"error_description" : "Missing parameter: redirect_uri"
}

鉴于错误,我在 javascript 中的 auth 实例中查看了调试,并注意到它指示的是redirect_uri。然后我更新了我的 google 凭据并在授权重定向 URI 中指定了该 URI(它是访问 javascript 的 URL,因为身份验证服务器正确返回到指定的 javascript 回调)。使用更新的凭据和在 GoogleAuthorizationCodeTokenRequest (String redirect_URI = " http://example.com:8080/JavascriptLocation ";) 实例化中指定的 URI,错误变为:
400 Bad Request
{
"error" : "redirect_uri_mismatch",
"error_description" : "Bad Request"
}

我一直跟踪到到身份验证服务器 (www.googleapis.com/oauth2/v4/token) 的实际 HttpRequest,但无法确定它正在寻找什么 redirect_uri。

有谁知道在这种情况下 redirect_uri 的值应该是什么(使用 grantOfflineAccess() 时)?我很高兴发布更多代码,如果这有帮助的话......只是不想淹没页面。谢谢。

最佳答案

在发布问题后立即找到了对“postmessage”的引用……将其用作服务器端的 redirect_URI 似乎可以从身份验证服务器生成成功的响应。所以...在下面的代码中设置 redirect_URI="postmessage"似乎在这种情况下有效。

GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
httpTransport, JSON_FACTORY,
"https://www.googleapis.com/oauth2/v4/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
token_,
redirect_URI)
.execute();

关于authentication - 使用 GoogleAuth.grantOfflineAccess 在服务器上进行身份验证时出现 Redirect_URI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44369307/

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