Commit Graph

50 Commits

Author SHA1 Message Date
Rohit Yadav 8bb0a70a56 CLOUDSTACK-8457: SAML auth plugin improvements for production usage
* Move config options to SAML plugin
  This moves all configuration options from Config.java to SAML auth manager. This
  allows us to use the config framework.
* Make SAML2UserAuthenticator validate SAML token in httprequest
* Make logout API use ConfigKeys defined in saml auth manager
* Before doing SAML auth, cleanup local states and cookies
* Fix configurations in 4.5.1 to 4.5.2 upgrade path
* Fail if idp has no sso URL defined
* Add a default set of SAML SP cert for testing purposes
  Now to enable and use saml, one needs to do a deploydb-saml after doing a deploydb
* UI remembers login selections, IDP server

- CLOUDSTACK-8458:
    * On UI show dropdown list of discovered IdPs
    * Support SAML Federation, where there may be more than one IdP
        - New datastructure to hold metadata of SP or IdP
        - Recursive processing of IdP metadata
        - Fix login/logout APIs to get new interface and metadata data structure
        - Add org/contact information to metadata
        - Add new API: listIdps that returns list of all discovered IdPs
        - Refactor and cleanup code and tests

- CLOUDSTACK-8459:
    * Add HTTP-POST binding to SP metadata
    * Authn requests must use either HTTP POST/Artifact binding

- CLOUDSTACK-8461:
    * Use unspecified x509 cert as a fallback encryption/signing key
      In case a IDP's metadata does not clearly say if their certificates need to be
      used as signing or encryption and we don't find that, fallback to use the
      unspecified key itself.

- CLOUDSTACK-8462:
    * SAML Auth plugin should not do authorization
      This removes logic to create user if they don't exist. This strictly now
      assumes that users have been already created/imported/authorized by admins.
      As per SAML v2.0 spec section 4.1.2, the SP provider should create authn requests using
      either HTTP POST or HTTP Artifact binding to transfer the message through a
      user agent (browser in our case). The use of HTTP Redirect was one of the reasons
      why this plugin failed to work for some IdP servers that enforce this.
    * Add new User Source
      By reusing the source field, we can find if a user has been SAML enabled or not.
      The limitation is that, once say a user is imported by LDAP and then SAML
      enabled - they won't be able to use LDAP for authentication
    * UI should allow users to pass in domain they want to log into, though it is
      optional and needed only when a user has accounts across domains with same
      username and authorized IDP server
    * SAML users need to be authorized before they can authenticate
        - New column entity to track saml entity id for a user
        - Reusing source column to check if user is saml enabled or not
        - Add new source types, saml2 and saml2disabled
        - New table saml_token to solve the issue of multiple users across domains and
          to enforce security by tracking authn token and checking the samlresponse for
          the tokens
        - Implement API: authorizeSamlSso to enable/disable saml authentication for a
          user
        - Stubs to implement saml token flushing/expiry

- CLOUDSTACK-8463:
    * Use username attribute specified in global setting
      Use username attribute defined by admin from a global setting
      In case of encrypted assertion/attributes:
      - Decrypt them
      - Check signature if provided to check authenticity of message using IdP's
        public key and SP's private key
      - Loop through attributes to find the username

- CLOUDSTACK-8538:
    * Add new global config for SAML request sig algorithm

- CLOUDSTACK-8539:
    * Add metadata refresh timer task and token expiring
        - Fix domain path and save it to saml_tokens
        - Expire hour old saml tokens
        - Refresh metadata based on timer task
        - Fix unit tests

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

This closes #489

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-06-29 13:49:39 +02:00
Rohit Yadav d2471df0be utils: improve timeout to 60s, define generics properly
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-04-13 15:44:09 +05:30
Rohit Yadav b4a5a32a74 utils: use a better extended implementation of SSLSocketFactory
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-03-13 17:31:30 +05:30
Rohit Yadav cb08707add CLOUDSTACK-8273: refactor baremetal user name to utils, restrict baremetal user
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-02-26 17:42:21 +05:30
Rohit Yadav 78b9be07d5 Merge remote-tracking branch 'terbolous/saml2-certvalidity' into 4.5
This closes #71

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-02-05 17:20:35 +05:30
Erik Weber 03e07c41b5 CLOUDSTACK-8215: Change Date calculation to Joda DateTime 2015-02-05 11:31:42 +01:00
Rohit Yadav 125abe8234 improve protocol enabling based on socket object type
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit d62d511f47)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-02-05 15:49:01 +05:30
Erik Weber b84c8889a3 SAML changing date calculation
Signed-off-by: Erik Weber <terbolous@gmail.com>
2015-02-05 10:29:27 +01:00
Rohit Yadav 1172867df0 CLOUDSTACK-8195: Don't break IdP, return metadata XML
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-02-03 16:59:09 +05:30
Rohit Yadav 1bab1d0855 use a preferable protocol that works on jvm 1.6
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit f5f6c2d1a7)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

Conflicts:
	services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java
2015-01-29 16:02:42 +05:30
Rohit Yadav debfcdef78 CLOUDSTACK-8160: use preferable protocols
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-01-21 18:02:58 +05:30
Rohit Yadav 6bec69844d CLOUDSTACK-8037: Require signed AuthnRequest, adds more security
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-01-14 02:40:00 +05:30
Rohit Yadav 4358714381 CLOUDSTACK-8035: Generate and store X509Cert and reuse this for SAML
The fix generates X509Certificate if missing from DB and uses that for eternity.
SAML SP metadata remains same since it's using the same X509 certificate and
it remains same after restarts. The certificate is serialized, base64 encoded
and stored in the keystore table under a specific name. For reading, it's
retrieved, base64 decoded and deserialized.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-01-12 16:47:31 +05:30
Rohit Yadav b2b496288d CLOUDSTACK-8034: Hash user IDs for SAML authentication
The User table's UUID column is restricted to 40 chars only, since we don't
know how long the nameID/userID of a SAML authenticated user will be - the fix
hashes that user ID and takes a substring of length 40 chars. For hashing,
SHA256 is used which returns a 64 char length string.

- Fix tests, add test cases
- Improve checkSAMLUser method
- Use SHA256 one way hashing to create unique UUID for SAML users

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-01-12 13:33:57 +05:30
Rohit Yadav 5241d0faf8 CLOUDSTACK-7903: Fix build regression from previous fix
The previous fix tried to access StatsCollector from UsageManagerImpl
which is not possible due to dependency cycle.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit 1e0880cbab)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

Conflicts:
	server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
2014-12-01 16:39:01 +05:30
Rohit Yadav 6df0b9f677 SAMLUtils: SAML user id should fit within the UUID VARCHAR(40) column
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-10-31 00:39:20 +05:30
Rohit Yadav 88c6072b4d CID-1237196: Fix potential NPE in SAMLUtils
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-09-16 17:10:11 +02:00
Rohit Yadav d46e45991d SAMLUtils: put name id policy on authnrequest
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-09-12 17:11:06 +02:00
Rohit Yadav 84b0e9e96f utils: add missing string to the url in generate saml signature method
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-09-12 16:26:13 +02:00
Rohit Yadav 5a0ed8764b SAMLUtils: Fix NPE incase signature is generated with a null privateKey
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-09-12 15:46:44 +02:00
Rohit Yadav a66127dfb1 utils: add methods to save and load public and private keys
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-09-12 15:40:49 +02:00
Rohit Yadav 550762a0dc SAMLUtils: fix signature, refactor generateRandomX509Certificate
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-30 21:37:55 +02:00
Rohit Yadav 2bff5956a9 cisco-vnmc: Don't create Protocol using deprecated SecureProtocolSocketFactory
Latest httpclient library suggests when creating Protocol object for use
with the apache common httpclient class, they should avoid using the
deprecated Protocol signature which takes in SecureProtocolSocketFactory

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-29 14:39:29 +02:00
Rohit Yadav 5e7928bcb9 utils: fix static certificate value string in SAMLUtils
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:27 +02:00
Rohit Yadav 1ed532fb20 SAMLUtils: add unit test for SAMLUtils and method to randomly generate X509 certs
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:26 +02:00
Rohit Yadav 3bf387c882 SAMLUtils: Create new NameID using passed nameId taking just id and session idx
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:26 +02:00
Rohit Yadav 8dc50927f9 saml: use SAML_RESPONSE from SAMLUtils
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:26 +02:00
Rohit Yadav 230e970569 SAMLUtils: add logout request utility for saml slo
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:25 +02:00
Rohit Yadav 8fa9d2c276 utils: fix SAMLUtils's authnrequest maker
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:25 +02:00
Rohit Yadav 8e6cb04480 SAMLUtils: leave bootstrapping to upper layers
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:24 +02:00
Rohit Yadav 1b0f81ec6f utils: Remove hard coded strings from SAMLUtils
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:23 +02:00
Rohit Yadav d6ea4ad7e0 utils: refactor and aggregate methods in SAMLUtils
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:22 +02:00
Min Chen e3564658be CLOUDSTACK-6940, CLOUDSTACK-7312, CLOUDSTACK-5512: Template/ISO/Volume
upload rejects some valid URL formats. Also consolidate URL format check
into one util routine.
2014-08-12 11:43:08 -07:00
Rajani Karuturi 58bad41910 Fixed CLOUDSTACK-6983: unable to register lxc template
added a check for tar.gz format in checktemplate
2014-07-21 16:57:53 +05:30
Edison Su 51c14106d8 CLOUDSTACK-7123: set the timeout to 60s, when run the file command 2014-07-18 12:07:36 -07:00
Marcus Sorensen 15ac47e47b CLOUDSTACK-6088: Check first bytes of template when downloading to verify format/type 2014-05-28 15:40:57 -06:00
Hugo Trippaers 594b51c629 Fixup the license headers in the utils project. All files now use the same license header and this is enforced by the maven-license-check plugin. 2014-02-18 12:08:36 +01:00
Alex Huang be5e5cc641 All Checkstyle problems corrected 2013-12-12 12:26:07 -08:00
Alex Huang d620df2bdd Reformatted all of the code. 2013-11-21 06:15:26 -08:00
Alex Huang 224f479974 Removed trailing spaces 2013-11-21 04:08:01 -08:00
Alex Huang 8d62744681 Reformat all source code. Added checkstyle to check the source code 2013-11-20 07:26:53 -08:00
Alex Huang 5495f10bce Revert "Reverting the range of commits that broke the build"
This reverts commit b59e3aaefc.
2013-08-08 15:02:40 -07:00
Prasanna Santhanam b59e3aaefc Reverting the range of commits that broke the build
This reverts commits 30c33415..f6a2c817bc

Signed-off-by: Prasanna Santhanam <tsp@apache.org>
2013-08-08 14:46:56 +05:30
Alex Huang 942f282a6e Moved config into it's own package 2013-08-07 16:41:02 -07:00
Alex Huang 1e1ee902a2 Moved over the new jobs framework from vmsync. This has not been integrated into the server package yet. Will do that next 2013-07-30 15:00:58 -07:00
Amogh Vasekar a47faa9d28 Adding HTTPS support for UCS, refactored code for o.a.c.httpclient.contrib
CLOUDSTACK-3285
UCS: Need support for HTTP redirects and HTTPS Certificate handling
2013-07-24 13:55:23 -07:00
Alex Huang b18c72626b Moved the SprintUtils which is for testing only to be in test directory. Changed pom.xml for different projects to use the utils test-jar. Removed some @Component annotations. Moved majority of the dependencies from cloudstack pom to utils pom 2013-07-18 21:53:51 -07:00
ahuang 11971b5a58 Bring over from vmsync changes in utils package. Simple changes. New files are not being used yet in master 2013-07-17 18:29:42 -07:00
Murali Reddy 3c1b3c71fe CLOUDSTACK-3440: action events are not published due to conflict of
Eventutils and ActionEventUtils files

removing the 'EventUtils' file which got merged back during the Spring
changes to master at 4.1. 'EventUtils' file was replaced by
'ActionEventUtils', and the original file was removed for events
frameworks. This file conflict was resulting in action events not to be
published on to event bus
2013-07-10 16:44:08 +05:30
Nitin Mehta c11dbad9c9 merge master 2013-05-11 15:28:43 +05:30