2

我正在编写一个 IOS SDK 并实现 oauth2.0 流程。

我在 IOS SDK 中有以下 oauth2.0 流程,以允许开发人员控制我的用户帐户:

  • 使用 mysite/oauth2.0 作为 url 打开 webview
  • 用户登录/注册。
  • Mysite.com 重定向到带有查询字符串中的代码或错误的特殊 url。
  • Webview(通过 shouldStartLoadWithRequest 函数)识别特殊 url 并自行关闭。

然后它将代码传递给父控制器的委托函数。

[self.delegate processOauth2.0Code: code]

如果出现错误(可能用户拒绝了 oauth2.0),它会创建 NSError 对象并将 NSError 对象发送到单独的委托函数)

[self.delegate processOAuth2.0Error: error]
  • 父控制器功能然后将代码发送到 Web 服务器
  • Web 服务器使用代码及其应用程序密钥对我的站点进行 api 调用以检索访问令牌。

这样的 Oauth2.0 流程是在移动应用程序中设计的吗?

你们对我改进设计有什么建议吗?

代码和错误有两个委托函数是否正常?

4

1 回答 1

0

上面的过程看起来是正确的,但是我并不熟悉所有的细节。原因是有很多 OAuth2 库允许您将此过程视为本质上的黑盒。

流行的 OAuth 提供商:

  • 许多人使用 AFNetworking 及其 OAUth 扩展。

  • 我使用 GTMOAuth2,可以通过CocooPods安装。它包含用于身份验证(即获取、验证或刷新令牌)以及发送网络请求的方法。我只是将它用于身份验证部分,使用另一个 HTTP 堆栈,我只是将 OAuth 令牌添加为请求标头。

使用 GTMOAuth2:

  • 设置起来可能有点复杂。比适合 SO 答案的代码多一点。基本上,您将 GTMOAuth2ViewControllerTouch 添加到您的窗口,并使用它来收集凭据。
  • 测试它的最佳方法是运行示例,然后修改它们以与您自己的后端对话。运行后,将代码移植到您的应用程序中。

我建议您使用 OAuth 库,而不是尝试自己实现它。

于 2013-11-02T03:43:01.847 回答