我正在尝试通过 iOS 应用程序将 oauth.io 与 Twitter 或 Facebook 结合使用,通过服务器端身份验证。我可以使用 [_oauthio showWithProvider:providerName];
连接到该服务,并且连接无误返回。然而,我得到的是
oauthtest://localhost#oauthio={"status":"error","message":"你必须提供服务器端认证时的状态","provider":"twitter"}
换句话说,它需要一个state
参数。但是没有明显的方法可以将它添加到任何地方的调用中吗?有谁知道如何添加这个?
更新:我深入研究了 oath.io SDK,并将 &state=abc
拼接到 showProviderWith:
方法内的 URL 构造中,但这仍然给出了同样的结果:连接返回成功,但是content提示错误如上。
使用不同的提供商 Facebook,我得到完全相同的结果(当然,使用 "provider":"Facebook"
)
最佳答案
好的,通过查看 oauth.io Android SDK 找到了答案:有一个添加状态参数的工具,但它是一个URL 编码的 JSON 对象强>.所以在 iOS 查询字符串中传递它的正确方法是有一个查询参数 opts
它的值(value)是{"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 = :, and %7D = } 用于 JSON 对象的百分比编码。)
关键元素是包裹在 opt
中范围。这些实际上都没有包含在 oauth.io iOS SDK 中。
更新:我的 pull-request 现已合并,并且有一个新方法可用于传递选项:[_oauthio showWithProvider:@"twitter" options:@{@"state": <STATE_VALUE>}];
.
`
关于ios - 使用服务器端身份验证为 oauth.io 调用提供状态(使用 iOS SDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21833734/