OAuth2访问令牌不必过期(或者确实如此,但可能需要很多年)。
访问令牌可以用于从资源服务器获取某些资源,特别是它允许获取用户批准的资源。刷新令牌另一方面允许重复访问。因此,人们不能废除刷新令牌,而不需要每次访问之间的用户交互。
一般来说,令牌有时可能被相同设备上的其他恶意应用程序或手机上的MITM攻击所盗用。如果可以让手机信任狡猾的证书,SSL就可以使用MITM。公司有时需要访问内部网络(他们要求接受一个自签名证书,这允许他们通过公司网络发生MITM所有加密流量,因此假设发送令牌加密意味着他们不会在途中被盗。危险的,
无限制令牌本身并不弱于任何其他形式的令牌本质,如一堆论文(包括我自己的一篇文章中所证明的那样,当我可以将其挖掘出来时,我会发布该链接)。然而,无记名代币只适用于他们所作的假设是有效的假设,令牌可以保密是一般承载代币的主要假设,如果不是这样,则承载令牌不会声明任何安全属性(尽管有些仍然成立),见NIST Level 3 tokens,它定义了持票人令牌必须击败什么攻击,如s在OAuth Bearer Tokens中特化。短承载令牌不应该打败令牌的盗窃行为。
无法撤销无记名令牌,这是真的。然而,鉴于通常的访问模式是在获取后立即使用访问令牌,因此即使当前无法考虑滥用案例,也应尽快终止访问令牌以防止潜在的滥用。令牌越长,它被盗的可能性就越大。刷新令牌实际上更加危险,因为如果您无法保护客户端ID,它会在更长的时间框架内提供重复访问。一般而言,OAuth2可以提供对资源的访问,因此可以用于向客户端公开一段时间的API。使用刷新令牌可以完成更多的损害,而不是单个使用令牌。
客户端身份验证实际上可以通过多种方式更安全,例如,为每个客户端下载不同的密钥。这可以防止在一台设备上对令牌进行反向工程设计,破坏客户端所有实例的安全性的广泛攻击。其他潜在的技术包括使用OAuth验证客户端与您的服务器,然后使用您希望访问的授权服务器执行第二次OAuth协议运行。然后,您可以让客户定期更新密钥,并为他们提供不同的密钥,同时不会给Facebook或Google所拥有的授权服务器所使用的系统带来不必要的负担。
使用移动应用程序时,即使没有采取措施来保护客户端,长寿命刷新令牌也比拥有某种多用途持票者令牌更安全。这是因为用户不能过期令牌。如果刷新令牌没有被盗用,并且用户仅仅希望撤销访问,那么这可以完成。即使用户仅希望撤销访问权限,也不能撤消多用途持票人令牌。一个多用途的数据库引用令牌显然可以被撤消,但这不是该协议的设计目的,因此在OAuth上执行的安全分析并没有说明这个混合系统的安全性。
总之,我会建议使用刷新令牌和数据库令牌,因为这是最可能安全的。如果你能做任何事情来保护客户,这是一个奖金,但这种保护的情况是微乎其微的。如果你确实想要保护客户端的话,可以考虑使用软标记,一个la google authenticator,因为这是一个坚实的实现,经得起一些非常聪明的人的分析。
“在发放代币后,Google可以决定是否由开发者授权应用程序以他的名义申请代币。”他们如何做到这一点? Android操作系统是否位于应用程序和网络之间,是否证明应用程序已正确签名? – Thilo 2012-07-19 04:53:03
在Android上,您可以使用['AccountManager'](https://developer.android.com/reference/android/accounts/AccountManager.html)类来处理令牌和授权,Google的服务已经内置在那里。我不认为他们已经在使用应用程序签名检查,而是使用客户端凭证方法。签名检查是在[Yaniv Inbar的Google I/O 2012谈话](http://www.youtube.com/watch?v=dylFNrvZ_3U)中公布的,有趣的部分是[10:41](http:///www.youtube.com/watch?v=dylFNrvZ_3U&hd=1&t=10m41s)。 – 2012-07-19 10:24:47
该项目名为[Google Play服务](https://developers.google.com/android/google-play-services/)。 – 2012-07-19 10:28:54