OpenId Connect端点返回'未找到'

时间:2015-01-31 09:52:43

标签: google-app-engine google-oauth scribe google-openid openid-connect

我正在将OpenID 2.0迁移到OAuth 2.0登录(请参阅https://developers.google.com/accounts/docs/OpenID?hl=ja)。我想将新的OpenID 2.0标识符映射到我/我的数据库中的旧/现有OpenID Connect标识符。

我正处理OAuth响应(redirect_uri),我想使用https://www.googleapis.com/oauth2/v3/token端点,来交换访问令牌和openid_id字段的授权代码,我会用它来选择我的数据库中的现有用户。

但是,我对https://www.googleapis.com/oauth2/v3/token的调用会返回“未找到”。有什么线索的原因?

我正在使用scribe 1.3.7,这是我的代码:

OAuthService service = new ServiceBuilder().provider(Google2Api.class).apiKey(xxxxxxxx).apiSecret(yyyyyyyyyyyyyyy).callback(zzzzzzzzzzzzzzzzzzzz).scope("openid profile https://mail.google.com/ https://www.googleapis.com/auth/userinfo.email").build();
Token accessToken = service.getAccessToken(null, new Verifier(oauth_verifier);
OAuthRequest request = new OAuthRequest(Verb.GET, "https://www.googleapis.com/oauth2/v3/token");
request.addQuerystringParameter("format","json");
request.addQuerystringParameter(OAuthConstants.REALM, "http://*.unclestock.com");
service.signRequest(accessToken, request); 
Response response = request.send(); 
// result -> not found

1 个答案:

答案 0 :(得分:3)

GET请求https://www.googleapis.com/oauth2/v3/token返回'未找到'。您需要对请求使用HTTP POST

将代码的第3行更新为以下内容,然后重试:

OAuthRequest request = new OAuthRequest(Verb.POST, "https://www.googleapis.com/oauth2/v3/token");

您可以在official docs中详细了解如何交换访问令牌和ID令牌的代码。