gpt4 book ai didi

delphi - 请求访问 token 时 AppEngine 错误 400

转载 作者:行者123 更新时间:2023-12-02 17:33:47 27 4
gpt4 key购买 nike

我正在编写一个基于 Delphi 的 PC 应用程序,该应用程序访问 AppEngine servlet。我正在尝试使用 OAuth 1.0 dance 来验证用户身份并允许访问应用程序的受限部分。我可以使用浏览器并通过谷歌用户身份验证来访问受限的 servlet。我现在正在尝试实现舞蹈。我使用 OAuthGetRequestToken 成功获取了 token 和 token secret 。

Key := 'XXXX.appspot.com';
Secret := 'YYYY';
URL := 'https://XXXX.appspot.com/_ah/OAuthGetRequestToken';
Consumer := TOAuthConsumer.Create(Key, Secret);
HMAC := TOAuthSignatureMethod_HMAC_SHA1.Create;
ARequest := TOAuthRequest.Create(URL);
ARequest := ARequest.FromConsumerAndToken(Consumer, nil, URL,'','oob','');
ARequest.Sign_Request(HMAC, Consumer, nil,true);
URL := URL + '?' + ARequest.GetString;
idHTTP1.Get(URL,ms);
ARequest.Destroy;
HMAC.Destroy;
Consumer.Destroy;

GET 请求和响应如下所示:

GET /_ah/OAuthGetRequestToken HTTP/1.1
Host: XXXX.appspot.com
Accept: */*
Authorization: OAuth oauth_version="1.0", oauth_nonce="1511ec6d98e5b89c561b1af4b3022476", oauth_timestamp="1347534557", oauth_consumer_key="XXXX.appspot.com", oauth_callback="oob", oauth_signature_method="HMAC-SHA1", oauth_signature="JPSgMsipsLumldKsca8SA8gDXgw%3D"

HTTP/1.1 200 OK
Date: Thu, 13 Sep 2012 11:09:18 GMT
Content-Type: text/html
Server: Google Frontend
Content-Length: 88
oauth_token=4%2FY4ReEZt9v8IYHJ_4WnZYkzurXOgw&oauth_token_secret=S9150fuyvo_jjr43Cd47CPzY

接下来,我授权 token 。

URL := 'https://inksureauth.appspot.com/_ah/OAuthAuthorizeToken?oauth_token='+TOAuthUtil.urlEncodeRFC3986(Token.Text);
IdHTTP1.Get(URL,ms);

我被重定向到 Google 网页进行登录。正如我所说的“oob”回调,我在复制的网页上收到了验证码。

最后,我尝试将 token 交换为访问 token 。在这里我失败了。

URL := 'https://XXXX.appspot.com/_ah/OAuthGetAccessToken';
Key := 'XXXX.appspot.com';
Secret := 'YYYY';
Consumer := TOAuthConsumer.Create(Key, Secret);
ARequest := TOAuthRequest.Create(URL);
AToken := TOAuthToken.Create(TOAuthUtil.urlEncodeRFC3986(Token.Text), TokenSecret.Text);
ARequest.HTTPURL := URL;
ARequest := ARequest.FromConsumerAndToken(Consumer,AToken , URL,'','','VERIFICATION CODE FROM WEB PAGE');
HMAC := TOAuthSignatureMethod_HMAC_SHA1.Create;
ARequest.Sign_Request(HMAC, Consumer, AToken,true);
URL := URL + '?' + ARequest.GetString;
IdHTTP1.Disconnect;
IdHTTP1.Get(URL,ms);
HMAC.Destroy;
ARequest.Destroy;
Consumer.Destroy;

GET 命令如下所示:

GET /_ah/OAuthGetAccessToken?oauth_version=1.0&oauth_nonce=4A86BEECE494C25AF94882F74DEE6231&oauth_timestamp=1347545383&oauth_consumer_key=XXXX.appspot.com&oauth_verifier=yGEhCENYOlni2ayo8aNckyPG&oauth_token=4%2FEKGFo9i2wmuMGcBLmbmQhqDba0z4&oauth_signature_method=HMAC-SHA1&oauth_signature=2ZwRvGp8LnXenTXrjYo5%2FtFHW30%3D HTTP/1.1

响应:

HTTP/1.1 400 Bad Request
Date: Thu, 13 Sep 2012 14:09:44 GMT
Content-Type: text/html; charset=UTF-8
Server: Google Frontend
Content-Length: 273


<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Bad Request</h1>
<h2>Your client has issued a malformed or illegal request.</h2>
<h2></h2>
</body></html>

我使用 OAuth Playground 访问同一应用程序,并且成功检索访问 key 。我将 Playground 的请求参数与我的应用程序生成的参数进行了比较,它们是兼容的。我使用签名函数对 Playground 生成的请求进行签名,并且签名匹配。还有什么其他原因会导致最后一步失败呢?除了“您的客户端发出了格式错误或非法的请求”之外,是否可以从身份验证服务器获得更多信息?

更新:我已使用我的应用程序成功检索 Google 日历的访问 token 。使用相同的代码,我改回 AppEngine 应用程序,但在 GetAccessToken 步骤上失败。

最佳答案

Google 同时迁移到 Oauth 2.0。您可以在这里找到 OAuth 2.0 客户端身份验证解决方案:

https://github.com/lordcrc/IndySASLOAuth2

Simple OAuth2 SASL authenticator for Indy.

Uses the Delphi REST client libraries.

Tested on Delphi XE6.

Licensed under the Apache 2.0 license

关于delphi - 请求访问 token 时 AppEngine 错误 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408798/

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