Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为从移动和javascript web应用程序访问的rest API实现类似OAuth 2.0的基于令牌的身份验证_Javascript_Android_Rest_Authentication_Oauth 2.0 - Fatal编程技术网

如何为从移动和javascript web应用程序访问的rest API实现类似OAuth 2.0的基于令牌的身份验证

如何为从移动和javascript web应用程序访问的rest API实现类似OAuth 2.0的基于令牌的身份验证,javascript,android,rest,authentication,oauth-2.0,Javascript,Android,Rest,Authentication,Oauth 2.0,我需要为我的RESTAPI实现身份验证和授权机制。这是从移动应用程序和web应用程序访问的RESTAPI 我想实现的机制: 根据我的理解,我正在使用基于密码的身份验证。移动应用程序或javascript web应用程序通过HTTPS post请求发送用户名和密码,以在有限的时间内获取访问令牌 问题 As访问令牌每1小时左右过期一次。再次请求最终用户输入用户名和密码。这是不能接受的 如果我们将令牌的时间延长一段时间,那么如果有人获得令牌的句柄,他们就可以有更多时间访问RESTAPI。由于web应用

我需要为我的RESTAPI实现身份验证和授权机制。这是从移动应用程序和web应用程序访问的RESTAPI

我想实现的机制:
根据我的理解,我正在使用基于密码的身份验证。移动应用程序或javascript web应用程序通过HTTPS post请求发送用户名和密码,以在有限的时间内获取访问令牌

问题

  • As访问令牌每1小时左右过期一次。再次请求最终用户输入用户名和密码。这是不能接受的
  • 如果我们将令牌的时间延长一段时间,那么如果有人获得令牌的句柄,他们就可以有更多时间访问RESTAPI。由于web应用程序是javascript应用程序,因此它在计划文本中很容易获得 因此,我试图了解facebook和twitter等应用程序是如何为其本地移动应用程序实现授权的。他们是否通过存储在本地存储器中永远记住访问令牌。因此,如果某些恶意应用程序具有对android phone的root访问权限,则可以访问令牌


    上述机制有哪些改进,使其既适用于javascript开发的独立web应用程序,也适用于android应用程序?

    访问令牌确实是短暂的。为了长时间维护授权,OAuth2有一种称为“刷新令牌”的东西

    如果提供商支持(Google和Facebook都支持),OAuth2消费者可以在初始流程中请求除访问令牌之外的刷新令牌(我相信Google称之为“离线访问”)。访问令牌通常使用,但当它过期时,使用者可以使用其凭据和刷新令牌请求新的访问令牌


    有关更多信息,请参阅谷歌文档:。

    但如果我是从javascript访问,我无法透露刷新令牌所需的秘密令牌。那么,当从javascript或打包的移动应用程序进行访问时,我们如何实现刷新令牌呢。如果是这样,则流不支持刷新令牌。在您的情况下,您可能希望查看密码授予()的情况,用户将其凭据提供给使用者,使用者将这些凭据交换为访问和刷新令牌。通常情况下,消费者还需要提供自己的凭据,但您可以将其设置为可选。对于移动应用程序,密码授予是有意义的。但是,对于您的webapp,您可以使用授权码授权,而不是隐式授权。这意味着保存令牌的是服务器,而不是javascript。谢谢Christophe。我明白你的意思了,我将为web应用程序刷新令牌。我还需要一个澄清。在移动应用程序中,我应该多久询问一次用户密码。一旦你提供了密码,Facebook和twitter应用程序就不会要求输入密码。所以他们是否使用密码授权,并且永远不会使他们的令牌过期。这可能取决于您。授权服务器将使用密码授权颁发访问令牌和刷新令牌。然后,您的移动应用程序将在设备上的某个位置存储刷新令牌。从这一点开始,在刷新令牌过期之前,用户将不必重新输入其凭据。我猜谷歌和Facebook的刷新令牌永远不会过期,所以你可以做同样的事情。