使用oAuth实现移动应用的RESTful网络服务

3
我正在开发一个应用程序,它由两个主要部分组成:
1.带有REST API的Web应用程序。 2.移动应用程序(Android,iPhone)。
Web应用程序具有一个数据库,用于存储有关用户的数据(例如帖子,活动等)。移动应用程序使用Web应用程序的REST API访问该数据,但为此我需要某种形式的身份验证(用户必须进行身份验证才能访问/修改其数据)。
我知道可以轻松地通过这样的方式完成:移动应用程序在每个请求中提供用户名和密码给Web API,然后Web应用程序在提供服务之前对该用户名和密码进行身份验证。但是,我想使用oAuth(因此用户可以使用Google,Facebook等登录),这就使问题变得复杂了,我不确定哪种方法是最好的。
我的第一个想法是:移动应用程序将oAuth提供商(例如Facebook)凭据(用户名和密码)发送到Web应用程序,然后Web应用程序针对oAuth提供商对其进行身份验证。我很快意识到这是不可行的,因为这意味着用户必须信任你的站点不会滥用所提供的凭证,因此这不是它的实现方式。
我的第二个想法是:移动应用程序使用Web应用程序API告诉Web应用程序它想要针对oAuth提供商P进行身份验证。Web应用程序重定向到提供商P,用户输入其凭据。然后,提供商P将用户重定向回Web应用程序,其中用户登录,并向移动应用程序发送有关成功登录的JSON。如果不是手动输入凭据的部分,这将是一个很好的方法。我实现了这个解决方案,但问题是,在移动应用程序访问Web应用程序API后,不会立即返回JSON,而是先进行重定向,这使一切都混乱了。我考虑在移动应用程序内使用webView,但我不知道如何在需要发送JSON时从webView返回。我不确定是否应该进一步追求这个想法或者这是错误的做法?也许更好的方法是解决一些问题。
我的第三个想法是:移动应用程序直接针对oAuth提供商P进行身份验证。如果成功,则移动应用程序向Web应用程序发送包含用户信息(例如用户ID或用户密码)的请求,以便Web应用程序知道哪个用户正在访问它。但是这意味着Web应用程序必须信任移动应用程序给出的用户真正得到身份验证。这意味着Web应用程序需要确保API是从移动应用程序中访问的。我可以通过在移动应用程序中硬编码一个特殊密码(秘密),并将其与每个请求一起发送来证明该请求是由移动应用程序发送的来实现这一点。
这种方法的不利之处在于,我必须为每个(移动OS,oAuth提供商)组合实现移动应用程序对oAuth提供商的身份验证。而且我也不确定它有多安全。您认为这是一个好的方法吗?我错过了什么吗?这可能很好,但需要做很多工作。
请告诉我哪个想法最好,并且如果有任何改进/更改的方式,请告诉我,谢谢。
1个回答

2

在进一步的研究和与同事交流后,我决定最好的选择是第二个想法。我决定使用WebView来处理重定向(适用于iPhone和Android)。我将配置WebView,使其在用户被重定向回返回JSON的特定web应用程序URL时自动退出。
我认为这是最好的想法,因为这样我只需要在移动应用程序上实现/配置WebView,而所有oAuth逻辑都在Web应用程序上完成,这意味着在移动应用程序中(Android、iPhone)减少了代码重复,并且更易于扩展(我只需要修改一个Web应用程序,而不是2或3个移动应用程序)。


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