android - 移动应用程序中的 Uber OAuth 最佳实践

标签 android ios oauth uber-api

我想制作一个代表用户发出请求的移动应用程序。我了解以下 OAuth 流程:

  1. 在 Web View 中打开用户以授予我的应用访问权限以代表他们发出请求
  2. 当他们点击授予访问权限时,我的服务器端应用程序将收到一个带有授权代码的调用
  3. 然后我的服务器端应用程序需要为访问 token 交换授权码

我的困惑始于第 2 步。Uber 使用授权代码向我的端点发出请求,但我无法知道该授权属于哪个用户。我可以将其交换为访问 token 并将其存储在数据库中 30 天,但我无法将其取回给用户用于发出请求。

一个想法是我可以让用户使用电子邮件地址登录我的应用程序,然后我可以将其用作 key 以从我的服务器应用程序获取适当的访问 token ,但我无法将访问 token 与首先是我的数据库表中的电子邮件地址。

我想知道这里有哪些最佳实践。我的移动应用程序应该如何知道给定用户使用什么访问 token ?

(我直接联系了 Uber API 支持,但他们让我打开一个 StackOverflow 问题)

最佳答案

显然,这是一个广泛的问题,在很大程度上取决于您正在构建的应用类型、您希望用户流程是什么样子等等,但我会尽力为您指出正确的方向。

首先,Uber API 具有/v1/me 端点,它将返回用户的名字、姓氏和电子邮件地址等信息。因此,一种可能的流程是用户打开您的应用程序,然后他们通过整个 OAuth 流程,一旦您将授权代码交换为访问 token ,您立即使用它(从服务器)调用/v1/me 端点,然后使用用户电子邮件地址或 UUID 作为数据库中的键。如果您使用电子邮件地址,您可以只允许用户使用相同的电子邮件地址登录您的应用程序,并允许帐户创建过程只是 OAuth 流程。

我不是移动开发人员,但我对嵌入式 Web View 的理解是它们可以像任何其他浏览器一样使用 cookie。在这种情况下,您可以使用的另一件事是 session /cookie。假设您有某种类型的现有用户标识符,您可以将其添加为您的网络服务器的 cookie,然后当您的用户使用授权代码重定向到您的网络服务器时,附加的 cookie 将告诉您要关联哪个用户访问 token 。

最后,Uber 开发者平台在 OAuth 流程的授权阶段包含一个状态参数,如此处所示 https://developer.uber.com/docs/authentication您可以执行与我在上一段中描述的类似的操作,除了您可以将用户标识符存储在 state 参数中,并在用户重定向时将其发送回给您,而不是使用 cookie。您可以使用该信息将访问 token 绑定(bind)回数据库中的特定用户。

希望对您有所帮助!如果您仍然感到困惑,请随时联系我们。

干杯!

关于android - 移动应用程序中的 Uber OAuth 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262550/

相关文章:

iphone - 初始化我自己的 api 类

objective-c - 在运行时编辑存折通行证 (.pkpass) 文件?

Android-Tumblr API - 适用于 Android 的 Jumblr [OAuthConnectionException]

java - 在 mac osx 10 上安装 jdk 6 或更高版本

java - 将 json 值发布到服务器的不同方法

java - 我想将整数,字符串,对象, double ,位图,HashMap从一个 Activity 发送到android中的另一个 Activity

Android Google Maps API v2 显示路线

ios - 如何调试 "Thread 1: Fatal error: Index out of range in Swift"

mobile - 我可以将授权码与 PKCE Flow 一起用于移动应用程序吗?

web-services - 如何保护 RESTful Web 服务的安全?