优步移动应用程序中OAuth的最佳实践

4
我想制作一个移动应用程序,代表用户发出请求。我了解以下OAuth流程:
1. 在Web视图中打开用户以授权我的应用程序代表其发出请求 2. 当他们点击授权访问时,我的服务器端应用程序将收到一个带有授权代码的调用 3. 然后,我的服务器端应用程序需要交换授权代码以获取访问令牌
我的困惑始于第二步。Uber向我的端点发出带有授权代码的请求,但我无法知道该授权属于哪个用户。我可以将其兑换为访问令牌并在数据库中存储30天,但我无法将其返回给用户以用于发出请求。
一个想法是,我可以让用户使用电子邮件地址登录我的应用程序,然后我可以使用它作为密钥从我的服务器应用程序中获取适当的访问令牌,但我无法在第一次将访问令牌与电子邮件地址关联在我的DB表中。
我想知道这里的最佳实践是什么。我的移动应用程序应如何知道要为给定用户使用哪个访问令牌?
(我直接联系了Uber API支持,但他们要求我打开一个StackOverflow问题)
1个回答

2
显然,这是一个比较广泛的问题,高度依赖于你正在构建的应用程序类型,以及你想要用户流程看起来像什么等等,但我会尽力指导你正确的方向。
首先,Uber API 有 /v1/me 端点,其中将返回用户的名字、姓氏和电子邮件地址等信息。因此,一种可能的流程是,用户打开你的应用程序,然后经过整个 OAuth 流程,一旦你将授权码交换为访问令牌,你立即使用它(从服务器)调用 /v1/me 端点,然后使用用户的电子邮件地址或 UUID 作为数据库中的键。如果你使用了电子邮件地址,你可以允许用户使用相同的电子邮件地址登录到你的应用程序,并允许帐户创建过程只是 OAuth 流程。
我不是移动开发人员,但我对嵌入式 Web 视图的理解是,它们可以像任何其他浏览器一样使用 cookie。在这种情况下,另一件你可以使用的事情是会话/cookie。假设你有一些现有用户的标识符,你可以将其作为你的 Web 服务器的 cookie 添加,然后当你的用户被重定向到带有授权码的 Web 服务器时,附加的 cookie 将告诉你将访问令牌与哪个用户关联。
最后,Uber开发者平台在OAuth流程的授权阶段中包含一个状态参数,如https://developer.uber.com/docs/authentication所示。您可以执行与前面段落中描述类似的操作,但是不使用cookies,而是将用户标识符存储在状态参数中,当用户重定向时,它将被发送回您。您可以使用该信息将访问令牌绑定回DB中的特定用户。
希望这有所帮助!如果您仍然感到困惑,请随时联系我们。
祝好!

非常感谢!你救了我的一天) - nikiforovpizza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接