使用服务器端身份验证为oauth.io调用提供状态(使用iOS SDK)

时间:2014-02-17 16:01:37

标签: ios oauth

我正在尝试使用oauth.io与Twitter或Facebook,以及来自iOS应用程序的服务器端身份验证。我可以使用[_oauthio showWithProvider:providerName];连接到服务,连接返回没有错误。但是,我得到的是

oauthtest://localhost#oauthio={"status":"error","message":"You must provide a state when server-side auth","provider":"twitter"}

换句话说,它需要一个state参数。但是没有明显的方法可以将其添加到任何地方的呼叫中?有谁知道如何添加这个?

更新:我挖掘了oath.io SDK,并将&state=abc拼接到showProviderWith:方法中的URL构造中,但仍然提供相同的结果:连接成功返回,但内容表示上述错误。

使用不同的提供商Facebook,我得到完全相同的结果(当然,"provider":"Facebook"

1 个答案:

答案 0 :(得分:3)

好的,通过查看oauth.io Android SDK 找到答案:有一个添加状态参数的工具,但它是一个 URL编码的JSON对象。因此,在iOS查询字符串中传递它的正确方法是使用查询参数opts,其值为{"state":"STATE_HASH_HERE"}

具有状态值的完整查询字符串将如下所示:

https://oauth.io/auth/twitter?k=<PUBLIC_KEY> &opts=%7B%22state%22%3A%22<STATE_VALUE>%22%7D &redirect_uri=OAuthTest://localhost

(其中%7B = {,%22 =“,%3A =:和%7D =},用于JSON对象的百分比编码。)

关键因素是opt参数内部的结束。这些都不包含在oauth.io iOS SDK中。

更新:我的拉取请求现已合并,并且有一种新方法可用于传递选项:[_oauthio showWithProvider:@"twitter" options:@{@"state": <STATE_VALUE>}];。 `