移动应用程序的OAuth流程与OAuth保护的Rest API进行通信

时间:2017-03-10 20:47:14

标签: rest oauth

我在使用OAuth和移动应用程序时遇到了一个有趣的问题。我已经在SO上找到了几个类似的问题,但是我没有找到任何相关的答案。

该申请包括以下内容:

  • OAuth保护的Rest API
  • 使用API​​的Android移动应用程序(也称为可信客户端/官方应用程序)。

用户可以通过三种方式创建帐户:

  • 电子邮件/密码组合
  • Google帐户
  • Facebook帐户

有两个主要问题/我认为两者都相互联系/:

  1. 应该使用哪种OAuth授权类型?
  2. 如何处理第三方用户注册?
  3. 关于问题#1
    我正在考虑使用资源所有者密码授予/尽管我在本机应用程序/或客户端凭据授权类型中使用它时发现了一些不同的意见。在处理资源所有者密码授予类型时,我可以看到通过Facebook或Google创建的帐户存在问题,因为他们没有密码。

    关于问题#2
    哪一方应负责处理Facebook / Google注册?后端还是移动应用程序?在目前的情况下,没有网站,我认为移动应用程序应该是负责任的一方。

    关于外部帐户的第二个问题:如何处理有关OAuth保护的API的问题?

    我感谢任何建议!

1 个答案:

答案 0 :(得分:0)

一般来说,如果您推销自己的用户,集中授权第三方的功能是个好主意。您的后端代码应该能够通过Facebook和Google完成授权。无论授权从何处开始。

实施例

  1. 用户首次打开应用示例App,看到"使用google"注册/登录按钮并单击它。
  2. 应用启动oauth-flow并指定一个redirect_uri(即回调),它位于您自己的授权层中,例如https://exampleapp.com/google-auth-callback
  3. 然后您的服务器可以交换访问令牌的授权码 - >从谷歌获取用户身份并创建新用户
  4. 现在,应用程序需要凭借exampleapp.com/api,因此服务器会生成一个访问令牌,并通过应用程序回调将其返回给应用程序。即exampleapp。基本上,服务器可以302 Permanent Redirect对自定义URL架构执行ExampleApp://?access_token=ACCESS_TOKEN&refresh_token=REFRESH_TOKEN&expires_in=TIMESTAMP
  5. 现在,该应用可以与您的后端通信,并刷新令牌等。
  6. 注意:我假设您的服务提供商使用Oauth2,但Oauth1可以使用大致相同的过程。