我正在尝试使用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"
)
答案 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>}];
。
`