How to create authentication in a thick client to be secure?

A use case is used here:

I have a desktop application (built using Eclipse RCP) that, when launched, opens a dialog box with the "UserName" and "Password" fields. After the end user enters his username and password, he communicates with the server (remote spring servlet with the spring httpclient client side: similar here .), And authentication is performed on the server side.

A few questions related to the above scenario:

  • If you said that this authentication service should go down, what would be the best way to handle further procedures? Authentication is something that I can’t do away with. Would running a desktop client in "restricted" mode be a good idea? For example, important functions / menus / views will be disabled, will the rest of the application be available?
  • Should I have a backup of an authentication service running on another machine that is acting as a backup?
  • What are the general guidelines in this scenario? I remember reading about google transmissions and how it allowed you to edit and do things offline - should something like this be designed?

Please let me know your comments / suggestions on design / architecture. Appreciate your help.

+6
java eclipse security design-patterns
source share
4 answers

The simple answer is: do not allow the authentication service!

Verify that your authentication service runs in a load-balanced cluster environment behind a virtual IP address. Thus, you can avoid downtime in the event of a failure of one of the individual servers. This applies not only to the service itself, but also to any data sources on which it relies.

Obviously, no system is completely fault tolerant, but you should be able to bring the latency to 100%, that there is no need to create a "limited" mode for the desktop client.

+5
source share

Should I have a backup of the authentication service running on another computer while working as a backup?

Yes! That would be the best solution. The issue should be considered at the network / infrastructure level, and not at the client.

If there are useful parts of the application that can still function without access to the network (for example, the router is down, the NIC goes pop), option 1 can be considered. Adjust the amount of work needed to make it possible and how important your application is.

+3
source share

If the specified authentication service were to go down, what would be the best way to handle production? Authentication that I can’t do away with it. Would launch a desktop client in "limited" mode - is it a good idea? For example, important functions / menus / views will be disabled, will the rest of the application be available?

Running a desktop client in a limited way is a very good idea. Imagine if you could not write an email, transfer attachments, or do anything in your mail client if you are not logged in. A good user interface requires offline work.

If I have backup authentication, is the service running on another machine working as a backup?

These were the answers very well by others, although I do not completely agree with dbyrne. Although all your networks and servers can work fine, downtime is inevitable, and the connection between the desktop client and the server will not always be perfect.

+2
source share
  • If this authentication service were supposed to go down, what would be the best way to handle this production? Authentication that I can’t do away with it. Would launch a desktop client in "limited" mode - is it a good idea? For example, important functions / menus / views will be disabled, will the rest of the application be available?

Is a client useful without a server? Are there any things a user can do? If so, do you want the user to be able to perform these actions without authentication? This is the answer to your question.

It is not clear what you mean when you say: "Authentication is something that I can’t do away with." what do you mean. You mean that there are some functions that require user authentication, or that this is a requirement imposed by someone else, or? (Why can't you end this?)

  1. Should I have backup authentication working on another machine working as a backup?

How useful is your client in the situation above? If this is very useful, you can justify this decision and how much to spend on supporting the backup server on how valuable authenticated functions are.

If your application is useless without authentication, then base your decision on how much it costs to invest in a backup authentication server, how much it costs you when your users cannot authenticate.

  1. What are the general guidelines in this scenario? I remember that read about google transfers and how it will allow you to edit and do offline - should there be something like this should be designed?

If there is a way to keep useful data offline, I think this is a good idea, but I am biased towards saving my information in the cloud, where I cannot control or maintain it. It will cost time and implicitly money to develop the ability to do both online and offline, or just one of them. This is an opinion of how valuable the app is offline to your users.

+1
source share

All Articles