android应用与JavaRESTful服务交互时的安全码问题
Problems of security code of android app when interacting with Java RESTful services
我使用 spring 和 maven 构建了一个 RESTful 服务,另外,我编写了一个 Android 应用程序来访问我的网站,并且在应用程序的登录页面上有一个安全代码。
现在我可以从服务器获取安全码图片并成功显示在登录页面,但是当我向服务器发送正确的安全码和账户信息时,我发现找不到生成时保存的安全码。我把它作为一个属性保存到一个session对象中,结果是不同的session对象,因为下载安全码和登录是两个不同的请求。我需要验证安全码,所以我希望有人能帮助我解决以下问题:
- 下载安全码和登录是两个不同的请求,服务器怎么知道安全码是给谁生成的呢?我应该将生成的安全码保存在服务器端的什么位置?
- 防伪码图片,我return传到手机端的是一个字节数组,把这个数组转成图片显示在
Activity
上,你怎么[=37= 】 这个图片到手机端?有没有更好的方法?
- 我想一个手机用户的session从登录成功到session超时都是有效的,所以我想知道如何保持一个手机用户的session?
- 除了RESTful服务,Android应用程序通常通过什么方式与服务器交互?
对不起我的英语,希望我已经清楚地描述了我的问题...
任何答案将不胜感激,提前致谢。
听起来您需要就如何构建您的服务(以及您的客户端)做出一些相当高级别的决策。
您需要决定的第一件事是您希望您的服务是有状态的还是无状态的。传统上,REST 服务是无状态的,但这些是您的服务,所以这是您的选择。
- As downloading security code and login are two different requests, how do server know whom a security code is generated for? Where should I save the generated security code in server side?
如果您采用有状态路由,请使用会话 cookie。当从客户端收到对安全代码图像的请求时,该服务将开始会话。客户端将在收到服务的响应时设置 cookie。该会话 cookie 会将客户端的后续请求映射到会话,从而允许服务器将请求与安全代码相关联。
如果你走的是无状态路线,你应该向客户端传递另一条信息,比如一些uuid。客户端的下一个请求将包含安全代码和 uuid。服务器将保留一个uuid到安全图像的映射,允许它验证客户端的请求。
- For security code image, what I returned to mobile app is a byte array, and convert this array to image and then display it on Activity, how do you return this image to mobile side? Is there better ways?
字节数组没问题。 Base64 编码的字符串也可以。您可能只在图像中包含一个 http link。你来电。
- I want a session of a mobile user is valid from successful login to session time out, So I am wondering how to maintain a session of a mobile user?
如果您的服务是有状态的,您应该使用会话 cookie。您的 Android 客户端应该能够保留一个 cookie 存储来保存会话 cookie 并为每个请求发送它。
如果您的服务是无状态的,并且您不想为每个请求发送用户名和密码,您将需要某种临时身份验证令牌。这些服务将负责使该令牌过期。客户端将负责保存状态并将所有必要的信息传递给每个请求的服务。
- Besides RESTful services, usually through what ways an Android app can interact with server?
Android 具有开箱即用的 HTTP 功能,并且有许多优秀的第三方库可以在您需要时为您提供帮助。但如果您愿意,Android 也可以低于 HTTP。
你这里的问题真含糊。当然,大多数网络都是通过 HTTP(使用 REST 或其他方式)完成的,但并非必须如此。这取决于您决定您希望您的服务支持什么,然后让客户遵守它。如果您感觉特别受虐,可以使用 SOAP。你可以订任何你想要的合同。
REST 之所以成为 Web 服务的一种非常常见的结构,是因为它对 HTTP 规范来说是直观的,并且很容易在大多数类型的客户端上实现,还有其他原因。 ,
我使用 spring 和 maven 构建了一个 RESTful 服务,另外,我编写了一个 Android 应用程序来访问我的网站,并且在应用程序的登录页面上有一个安全代码。
现在我可以从服务器获取安全码图片并成功显示在登录页面,但是当我向服务器发送正确的安全码和账户信息时,我发现找不到生成时保存的安全码。我把它作为一个属性保存到一个session对象中,结果是不同的session对象,因为下载安全码和登录是两个不同的请求。我需要验证安全码,所以我希望有人能帮助我解决以下问题:
- 下载安全码和登录是两个不同的请求,服务器怎么知道安全码是给谁生成的呢?我应该将生成的安全码保存在服务器端的什么位置?
- 防伪码图片,我return传到手机端的是一个字节数组,把这个数组转成图片显示在
Activity
上,你怎么[=37= 】 这个图片到手机端?有没有更好的方法? - 我想一个手机用户的session从登录成功到session超时都是有效的,所以我想知道如何保持一个手机用户的session?
- 除了RESTful服务,Android应用程序通常通过什么方式与服务器交互?
对不起我的英语,希望我已经清楚地描述了我的问题...
任何答案将不胜感激,提前致谢。
听起来您需要就如何构建您的服务(以及您的客户端)做出一些相当高级别的决策。
您需要决定的第一件事是您希望您的服务是有状态的还是无状态的。传统上,REST 服务是无状态的,但这些是您的服务,所以这是您的选择。
- As downloading security code and login are two different requests, how do server know whom a security code is generated for? Where should I save the generated security code in server side?
如果您采用有状态路由,请使用会话 cookie。当从客户端收到对安全代码图像的请求时,该服务将开始会话。客户端将在收到服务的响应时设置 cookie。该会话 cookie 会将客户端的后续请求映射到会话,从而允许服务器将请求与安全代码相关联。
如果你走的是无状态路线,你应该向客户端传递另一条信息,比如一些uuid。客户端的下一个请求将包含安全代码和 uuid。服务器将保留一个uuid到安全图像的映射,允许它验证客户端的请求。
- For security code image, what I returned to mobile app is a byte array, and convert this array to image and then display it on Activity, how do you return this image to mobile side? Is there better ways?
字节数组没问题。 Base64 编码的字符串也可以。您可能只在图像中包含一个 http link。你来电。
- I want a session of a mobile user is valid from successful login to session time out, So I am wondering how to maintain a session of a mobile user?
如果您的服务是有状态的,您应该使用会话 cookie。您的 Android 客户端应该能够保留一个 cookie 存储来保存会话 cookie 并为每个请求发送它。
如果您的服务是无状态的,并且您不想为每个请求发送用户名和密码,您将需要某种临时身份验证令牌。这些服务将负责使该令牌过期。客户端将负责保存状态并将所有必要的信息传递给每个请求的服务。
- Besides RESTful services, usually through what ways an Android app can interact with server?
Android 具有开箱即用的 HTTP 功能,并且有许多优秀的第三方库可以在您需要时为您提供帮助。但如果您愿意,Android 也可以低于 HTTP。
你这里的问题真含糊。当然,大多数网络都是通过 HTTP(使用 REST 或其他方式)完成的,但并非必须如此。这取决于您决定您希望您的服务支持什么,然后让客户遵守它。如果您感觉特别受虐,可以使用 SOAP。你可以订任何你想要的合同。
REST 之所以成为 Web 服务的一种非常常见的结构,是因为它对 HTTP 规范来说是直观的,并且很容易在大多数类型的客户端上实现,还有其他原因。 ,