Android Cookie或RESTful密钥的身份验证?
我花了大量时间研究如何最好地实现从Android应用程序到Rails web服务器的用户身份验证。我知道有一些引擎可以为我在Rails端进行身份验证,但我需要的不是很复杂,因此我认为最好还是编写自己的身份验证代码 我对RESTful web服务非常感兴趣:在无状态web服务器中,代码更具可读性、可维护性和可更改性,仅举几个优点。作为一名独立研究此实现的大学生,这些东西对我来说并不是非常重要,但我相信从编码的角度来看,REST引导的实现将是理想的 因为我的应用程序需要维护自己上下文的用户帐户,所以在向Web服务器发出请求时,必须对用户进行身份验证。如果我以完全RESTful的方式实现这个应用程序,我不会维护任何类型的会话,而是要求Android应用程序(客户端)在每次请求时传递当前用户的凭据(可能是第一次登录时从web服务器返回给Android应用程序的唯一密钥)。这是一种有效的方法,但我担心这可能会在服务器端产生计算开销 原因如下:Android Cookie或RESTful密钥的身份验证?,android,ruby-on-rails,web-services,restful-authentication,Android,Ruby On Rails,Web Services,Restful Authentication,我花了大量时间研究如何最好地实现从Android应用程序到Rails web服务器的用户身份验证。我知道有一些引擎可以为我在Rails端进行身份验证,但我需要的不是很复杂,因此我认为最好还是编写自己的身份验证代码 我对RESTful web服务非常感兴趣:在无状态web服务器中,代码更具可读性、可维护性和可更改性,仅举几个优点。作为一名独立研究此实现的大学生,这些东西对我来说并不是非常重要,但我相信从编码的角度来看,REST引导的实现将是理想的 因为我的应用程序需要维护自己上下文的用户帐户,所以
- 在每个请求上通过长字符串查找用户以便对该用户进行操作要比在CookieStore会话中为关联表行使用整数用户ID慢
- 我可能不会在数据库中以纯文本形式存储RESTful身份验证密钥。我可能会使用BCrypt并存储密钥的salt和hash。这当然会导致此项目符号所解决的计算开销:在每个请求上使用BCrypt对接收到的密钥进行散列,以根据存储在数据库中的散列进行测试
谢谢在我的项目中,我通常使用另一种方法 一旦用户登录到系统,我就向他发送一个唯一生成的密钥,其中包含混合的普通信息和加密信息 基本上我是这样做的:
key=User.id.to_s+SHA1::Digest.hexdigest(“#{SECRET_key}{User.id}{User.name}}{User.created_at.to_i}”)
因为SHA1散列的长度是已知的,所以可以从字符串中提取id和令牌,而不需要任何特殊的分隔符。
通过这种方式,您可以获得两个好处:
希望这有帮助 在我的项目中,我通常使用另一种方法 一旦用户登录到系统,我就向他发送一个唯一生成的密钥,其中包含混合的普通信息和加密信息 基本上我是这样做的:
key=User.id.to_s+SHA1::Digest.hexdigest(“#{SECRET_key}{User.id}{User.name}}{User.created_at.to_i}”)
因为SHA1散列的长度是已知的,所以可以从字符串中提取id和令牌,而不需要任何特殊的分隔符。
通过这种方式,您可以获得两个好处: