我正在尝试在我的Android应用上实施Foursquare Native OAuth。我已经关注了foursquare-oauth-library示例,并成功为用户生成了access_token。
然而,根据Foursquare推荐的App's Secret没有存储在应用程序的任何地方,而是执行服务器端auth code / access_token交换,我正在我的服务器上进行调用,但每次我这样做都会得到redirect_uri_mismatch错误。
我正在获取示例应用中指定的身份验证码:
AuthCodeResponse codeResponse = FoursquareOAuth.getAuthCodeFromResult(resultCode, data);
然后,我将我的Android应用程序的身份验证代码发送到我的rails服务器。我假设应该在https://developer.foursquare.com/overview/auth#code的第3步之后获得access_token,但我得到redirect_uri_mismatch响应。
我在我的rails服务器上使用Nestful向Foursquare发送我对access_token的请求:
response = Nestful.post 'https://foursquare.com/oauth2/access_token',
client_id: ENV_CONFIG['foursquare_client_id'],
client_secret: ENV_CONFIG['foursquare_client_secret'],
grant_type: 'authorization_code',
redirect_uri: ENV_CONFIG['redirect_uri'],
code: params[:code]
@token = response['access_token']
回复是:
{"error":"redirect_uri_mismatch"}
我已经在Foursquare上仔细检查了应用程序的配置,我还在其中设置了我生成的Android Hash Key,甚至尝试将其作为redirect_uri参数提供以生成访问令牌,但无济于事。
知道我可能做错了什么?
答案 0 :(得分:2)
事实证明,给定代码检查最初提供的redirect_uri。由于首先没有指定,因此不应将redirect_uri参数传递给code / access_token交换调用。