murphymj wrote:
Thanks for your response but I have more questions: 1) it sound like its a naming convention in using roles for many apps, let me know if this is true 2) is the basic code ready to handle 900+ users? or is there some major limitation in the library or web service that would need a better enterprise interface? I not concerned with the normal add users / roles area.
thanks.
1) Yeah, the intended use is basically to setup Roles (user groups) to access applications and manually handle your authorization in the application. You could use System.Web.Security.Roles.Provider class to perform operations like IsUserInRole(username,rolename) to validate that a user belongs to a proper role for your application. In Windows applications, you'll manually have to perform these checks. Your roles could look something like "AccountingApp1Users" or "AccountingApp1Admins." At login in the client application AccountingApp1, you would make sure that the user is a member of the users role after they successfully authenticate username and password.
For more information on Role-Based Security goto MSDN at:
http://msdn2.microsoft.com/en-us/library/52kd59t0.aspx2) I have never personally tested this solution with 900+ users. But I'd be more than happy to hear feedback from you or anyone else that has seen how it performs in that environment. Also, let me know of any issues that may have come up when doing that. My strongest argument would only be that the built-in SqlMembership provider is essentially being used for this solution with web services in the middle. So as far as the actual traffic on the website directly, I'm sure that wouldn't be a problem. The component to really test is the web services and client authentication. Since it is a web based solution I'm sure 900+ requests wouldn't be that challenging of a prospect, but like I said, it is untested. There will likely be a bit more lag than your typical enterprise windows network with that many users.
Notes:
If you're using it in an enterprise environment, I would seriously consider looking at WCF or WSE and adapting these web services over to that architecture. The reason being, WCF Supports a much more robust security model and allows for authenticated web service consumers, encrypted handlers, digital signatures, policies, etc. I've also heard that performance is considerably better with some of the enhancements they've made like using direct TCP services instead of SOAP over HTTP, etc.
For more info on WCF see:
http://msdn2.microsoft.com/en-us/library/ms735119.aspxThe security model in this solution is geared more for shared hosting trust limitations. The client key files are simply XML files that contain a unicode string used to validate access when invoking functions in the web services. Every function on the web service contains a parameter for the key and it then validates the key before it continues. This way someone on the web wouldn't be able to just reset a users' password or get a users' information simply by consuming the web services or browsing to the asmx and passing in parameters manually.
If you wanted to use this solution in its current form for your environment, I would recommend making a couple enhancements: To make this solution more secure for an environment like yours, host the webservices using SSL (which does not require code change) to allow transport security. Then modify the code to encrypt/decrypt the key file residing on the client machines. (You would have to change the read/write functions in the SingleSignOn library to perform the encryption/decryption operations). This way users wouldn't be able to "see" the key just by opening it with notepad, and the transport encryption (SSL) would encrypt the communication between your client applications and the web services so they couldn't get the key by sniffing network traffic.
If you're concerned about traffic, then just beefing up the web hosting is always an option. There's a huge amount of flexibility that comes with web applications. You can cluster servers, beef up machine hardware, etc to allow more simultaneous processing.
There's a lot you can do. I hope this helps!
-Nathan