1

我从 v1foursquare api 升级到需要 Oauth2 的 v2。

使用推荐的 Web 服务器流程是否正确,我应该将用户定向到: https : //foursquare.com/oauth2/authenticate ?client_id=YOUR_CLIENT_ID &response_type=code &redirect_uri=YOUR_REGISTERED_REDIRECT_URI

一旦用户通过身份验证,foursquare 将重定向到: https://YOUR_REGISTERED_REDIRECT_URI/?code=CODE

这意味着我需要在https://YOUR_REGISTERED_REDIRECT_URI定义一个端点,然后它将向

https://foursquare.com/oauth2/access_token ?client_id=YOUR_CLIENT_ID &client_secret=YOUR_CLIENT_SECRET &grant_type=authorization_code &redirect_uri=YOUR_REGISTERED_REDIRECT_URI &code=CODE

在我的服务器端获取实际令牌。

此流程如何将令牌返回到移动设备以供使用?

谢谢您的帮助。

4

2 回答 2

1

这只是我的猜测,但这里有一个可能的流程:

  1. 打开 uiwebview 并将用户发送到https://foursquare.com/oauth2/authenticate ?client_id=YOUR_CLIENT_ID &response_type=code &redirect_uri=YOUR_REGISTERED_REDIRECT_URI
  2. 在他们接受后,他们将被重定向到https://YOUR_REGISTERED_REDIRECT_URI/?code=CODE例如https://domainyouown.com/callback?code=asdfasdfasdfasdf
  3. 你有回调页面向https://foursquare.com/oauth2/access_token发出请求吗?client_id=YOUR_CLIENT_ID &client_secret=YOUR_CLIENT_SECRET &grant_type=authorization_code &redirect_uri=YOUR_REGISTERED_REDIRECT_URI &code=CODE
  4. 获取 json 响应(仍在您的回调页面代码中),将其保存到您的服务器端数据库(如果正在使用),并在 id 为“oauth-token”的 div 中显示在页面的 html 上。
  5. 使用 UIWebView 的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *) 脚本获取 div 的值并将其存储在您的 iphone 设置中

您可能还想查看https://github.com/nxtbgthng/OAuth2Client

于 2010-12-21T20:14:34.420 回答
0

如果您正在执行无服务器流程(仅限移动应用程序),您将执行以下操作:

  1. 弹出 UIWebview -> https://foursquare.com/oauth2/authenticate?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI(确保重定向匹配)
  2. 您的重定向 uri 应指向您应用的 URL 方案(例如 APPNAME://callbackuri)。当用户完成登录时,UIWebview 将调用包含 oauth 令牌的重定向 URI。URI 将调用- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation您的应用程序委托中的方法。
  3. 要从 url 获取访问令牌:
if ([url.absoluteString rangeOfString:@"access_token="].location != NSNotFound) 
        NSString *accessToken = [[url.absoluteString componentsSeparatedByString:@"="] lastObject];

保存该 accessToken 并确保将其包含在所有 Foursquare 调用中(参数:oauth_token=ACCESSTOKEN)

于 2011-12-09T01:27:45.703 回答