This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jan 21, 2022. It is now read-only.

Repository files navigation

Cloud Foundry Login Server (Deprecated)

Retirement / Deprecation

The Cloud Foundry Login Server project has been retired. The functionality of the Login Server have been merged into the Cloud Foundry UAA

Login Server

Build StatusCoverage Status

Handles authentication in Cloud Foundry and delegates all other identity management tasks to the UAA. Also provides OAuth2 endpoints issuing tokens to client apps for Cloud Foundry (the tokens come from the UAA and no data are stored locally).

Co-ordinates

Running and Testing the Login Server

The Login Server is a standard JEE servlet application, and you can build a war file and deploy it to any container you like (./gradlew :war and look in the build/libs directory). For convenience there is also a Gradle task that will run the Login Server, the UAA and some sample apps all in the same container from the command line:

$ git clone https://github.com/cloudfoundry/login-server.git
$ cd login-server && ./update
$ ./gradlew run

You can run the Login Server tests using the command line as well. The integration tests require PhantomJS to be installed.

$ ./gradlew :test
$ ./gradlew :integrationTest

You can run all tests for the login server and the uaa with

$ ./gradlew test integrationTest

There are two documents that can help you configure the login server in your environment.

Login Server Configuration in deployment manifest

OpenAM Configuration

The Login Application

The UAA can authenticate user accounts, but only if it manages them itself, and it only provides a basic UI. The Login app can be branded and customized for non-native authentication and for more complicated UI flows, like user registration and password reset.

The login application is actually itself an OAuth2 endpoint provider, but delegates those features to the UAA server. Configuration for the login application therefore consists of locating the UAA through its OAuth2 endpoint URLs, and registering the login application itself as a client of the UAA. There is a login.yml for the UAA locations, e.g. for a local vcap instance:

uaa:
url: http://uaa.vcap.me
token:
url: http://uaa.vcap.me/oauth/token
login:
url: http://uaa.vcap.me/login.do

and there is an environment variable (or Java System property), LOGIN_SECRET for the client secret that the app uses when it authenticates itself with the UAA. The Login app is registered by default in the UAA only if there are no active Spring profiles (so not at all in vcap). In the UAA you can find the registration in the oauth-clients.xml config file. Here's a summary:

id: login
secret: loginsecret
authorized-grant-types: client_credentials
authorities: ROLE_LOGIN
resource-ids: oauth

Use Cases

  1. Authenticate

     GET /login
    

    The Login Server presents a form login interface for the backend UAA, or with other services (such as SAML).

  2. Approve OAuth2 token grant

     GET /oauth/authorize?client_id=app&response_type=code...
    

    Standard OAuth2 Authorization Endpoint. Client credentials and all other features are handled by the UAA in the back end, and the login server is used to render the UI (see access_confirmation.html).

  3. Obtain access token

     POST /oauth/token
    

    Standard OAuth2 Authorization Endpoint passed through to the UAA.

Contributing to the Login Server

Here are some ways for you to get involved in the community:

  • Get involved with the Cloud Foundry community on the mailing lists. Please help out on the mailing list by responding to questions and joining the debate.
  • Create github tickets for bugs and new features and comment and vote on the ones that you are interested in.
  • Github is for social coding: if you want to write code, we encourage contributions through pull requests from forks of this repository. If you want to contribute code this way, please reference an existing issue if there is one as well covering the specific issue you are addressing. Always submit pull requests to the "develop" branch.
  • Watch for upcoming articles on Cloud Foundry by subscribing to the cloudfoundry.org blog

The Cloud Foundry SAML Login Server

The saml_login server supports two additional features on top of what you get from the regular [login-server] 1. It adds authentication using an external SAML source. We have tested our authentication with [OpenAM] 2 and the vCenter SSO appliance.

###Configuring cf-release for a saml_login deployment

The saml_login deploys the same way as the login-server, with additional configuration parameters. Enabling saml is done using the spring_profiles configuration parameter. SAML can be used together, as two different profiles active at the same time.

  • Open your infrastructure manifest - for example cf-release/templates/cf-infrastructure-warden.yml

    Add your Tomcat JVM options as well as the intended protocol to use (http/https)

     saml_login:
    catalina_opts: -Xmx384m -XX:MaxPermSize=128m
    protocol: http
    

    Scroll down to your login job and change the template to saml_login, it will be found under

     jobs:
    - name: login_z1
    template: saml_login
    
  • Open your cf-jobs.yml manifest and change the template for the login job

     - name: login_z1
    release: (( meta.release.name ))
    template: saml_login
    
  • Open your cf-properties.yml manifest to configure saml_login properties

    Please note the spring_profiles setting

    • spring_profiles: saml (uses only saml with an external SAML provider)
     saml_login:
    #standard login server configuration
    catalina_opts: (( merge ))
    uaa_certificate: ~
    protocol: https
    links:
    home: (( "https://console." domain ))
    passwd: (( "https://console." domain "/password_resets/new" ))
    signup: (( "https://console." domain "/register" ))
    #if you wish to use saml
    spring_profiles: saml
    #saml authentication information, only required if 'saml' is part of spring_profiles
    entityid: cloudfoundry-saml-login-server
    idpEntityAlias: vsphere-local
    idpMetadataURL: "https://win2012-sso2:7444/websso/SAML2/Metadata/vsphere.local"
    serviceProviderKeyPassword: password
    serviceProviderKey: |
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,231BD428AF94D4C8
    0Nmo90pX8byVS7ZlakMIoXdJSLlxqzi1pN0g1ye2U+9HgTLTLuMwWaPknZ/2NFtK
    rO72ss8uc7xBAoMkOvcMTZCg5P4JDlmuQ31IabzRyOQcAxCPZedgarRnwxT6GUim
    JtkzNPmAAgf1bfUTu/LNt2o01dW+qq+2qiwUxgUBM2xLBmadIWqqTOZbkFc9Xjvl
    /IEnJgp/c49sNh68EpXPlsGJfW7jAh90nlA13H1fpvTsSg2/6wKbRsxxNkpVg0Nq
    bQURQIO6htOLZBPMMpoPILp/KtKkd1zpaZJnbZGDo9AdwfAh9dUbEw8ukJwRg3Xl
    lsptHoMGsGdvgViWZhCB/pAHYLh31G8oVMA/qPB9PNJYIK2aQZdm7yiAdf+m8Jxb
    Do2xBH6XUeHkg2F0LWnC/FjaMRpLuliI9vvJVB7YCQKkMdgNVV0SCx39IiX0rEm5
    8vuuoAH3b7b+maWp5+ffriNIcEFSlcmTPIgqZBboIORBNXZnHTUG7nGIML+nlOK9
    zdvF2vAxchqOKroc6+SGFLNvNQd9S/nLH3vP+aX9iStL55G11+p2tL+bIGMWZj0h
    Z+qqQoogtngRFbjcVoKYerFXbKG6xXzXUc4O3EbvAKvEi0HJodYccP3L7wIer1aY
    VaMF2M05g5KedHosEfvvhU17xS9L4u2SRMZIQ3K8iLNEhZ6bOw6EnzTaKWeffrYr
    UOjfMEgswcHfpxx1iD5T4RTwxuKOgtFhd1QM4enXPsU6uRU5PGSiB/0t6jal6ClF
    PhtIrTwhx0vBR4rySx4raXdLClxxt5vLe826C3uwo/6HTdUsnDvIXA==
    -----END RSA PRIVATE KEY-----
    serviceProviderKeyPassword: password
    serviceProviderCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIBzzCCATgCCQDTMCX3wJYrVDANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDFCFz
    YW1sX2xvZ2luLE9VPXRlc3QsTz12bXdhcmUsTz1jb20wHhcNMTMwNzAyMjMzOTU4
    WhcNMTQwNzAyMjMzOTU4WjAsMSowKAYDVQQDFCFzYW1sX2xvZ2luLE9VPXRlc3Qs
    Tz12bXdhcmUsTz1jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYBRuep
    WaoNA7/RsOUVlmOzxbhtfW8AstGXjsWbAmmg8NSruRlNuMz1WdCeESM3zBqLSyp8
    Vf3j3ExzB2qquDbPXNA1k4EqgNya2E+6n3KsgVLCWQm4W46Pd7C6QswrR6JgUKaW
    6KI8BgyJQ9wjL/nR8uqZouJJyRSLuIaGXIuXAgMBAAEwDQYJKoZIhvcNAQEFBQAD
    gYEAXOojarkGv5nVZqTuY8BRM/TRt1oby3i0VRG70l0PcDlWft52aSvCd3t8ds2S
    h92cXLz8nvHEBaBTkxTLtf2/h5x2KQhXyHoU1UU+JjOegoF+LD6KdmaVk2l35Na5
    1V2AHsj+yDrJ9aKwt86jbBbcFkRphdkn5ivq71GCWRfcpZE=
    -----END CERTIFICATE-----
    nameidFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    

About

Cloud Foundry Login Server

Resources

Stars

33 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages