Overview
The User Account and Authentication Service (UAA):
- is an OAuth2 server that can be used for centralized identity management.
- owns the user accounts and authentication sources (SAML, LDAP)
- supports standard protocols such as SAML, LDAP and OpenID Connect to provide single sign-on and delegated authorization to web applications
- can be invoked via JSON APIs
- provides a basic login/approval UI for web client apps
- supports APIs for user account management for an external web UI
- most of the APIs are defined by the specs for the OAuth2, OpenID Connect, and SCIM standards.
Authorization
Authorization Code Grant
Browser flow
$ curl 'http://localhost/oauth/authorize?response_type=code&client_id=login&scope=openid+oauth.approvals&redirect_uri=http%3A%2F%2Flocalhost%2Fapp&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=code&client_id=login&scope=openid+oauth.approvals&redirect_uri=http%3A%2F%2Flocalhost%2Fapp&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=KFksRWghLMg0cHCjHWwUsD; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:18 GMT; HttpOnly
Cache-Control: no-store
Content-Language: en
Location: http://localhost/app?code=WtFw2WFluZ
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, code for requesting an authorization code for an access token, as per OAuth spec |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. |
Api flow
$ curl 'http://localhost/oauth/authorize?response_type=code&client_id=login&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf&state=XOiOKE' -i -X GET \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiJhNDU3OWY2NmQzZTU0Mjc2YTE2MDY0ZTE2ZGI3M2Q0YiIsInN1YiI6ImNlYzAxOGZjLWIzMjQtNGMzZi05YzdhLTM4YmEwYzkzOGJkOCIsInNjb3BlIjpbInVhYS51c2VyIl0sImNsaWVudF9pZCI6ImNmIiwiY2lkIjoiY2YiLCJhenAiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiJjZWMwMThmYy1iMzI0LTRjM2YtOWM3YS0zOGJhMGM5MzhiZDgiLCJvcmlnaW4iOiJ1YWEiLCJ1c2VyX25hbWUiOiJtYXJpc3NhIiwiZW1haWwiOiJtYXJpc3NhQHRlc3Qub3JnIiwiYXV0aF90aW1lIjoxNTk0MTcxMzk4LCJyZXZfc2lnIjoiNDA0YTMyN2MiLCJpYXQiOjE1OTQxNzEzOTgsImV4cCI6MTU5NDIxNDU5OCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJjZiIsInVhYSJdfQ.7ytn0udWe3MIZq4sMZol6Ml8EWk8ass6bJLvww7_Az8'
GET /oauth/authorize?response_type=code&client_id=login&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf&state=XOiOKE HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiJhNDU3OWY2NmQzZTU0Mjc2YTE2MDY0ZTE2ZGI3M2Q0YiIsInN1YiI6ImNlYzAxOGZjLWIzMjQtNGMzZi05YzdhLTM4YmEwYzkzOGJkOCIsInNjb3BlIjpbInVhYS51c2VyIl0sImNsaWVudF9pZCI6ImNmIiwiY2lkIjoiY2YiLCJhenAiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiJjZWMwMThmYy1iMzI0LTRjM2YtOWM3YS0zOGJhMGM5MzhiZDgiLCJvcmlnaW4iOiJ1YWEiLCJ1c2VyX25hbWUiOiJtYXJpc3NhIiwiZW1haWwiOiJtYXJpc3NhQHRlc3Qub3JnIiwiYXV0aF90aW1lIjoxNTk0MTcxMzk4LCJyZXZfc2lnIjoiNDA0YTMyN2MiLCJpYXQiOjE1OTQxNzEzOTgsImV4cCI6MTU5NDIxNDU5OCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJjZiIsInVhYSJdfQ.7ytn0udWe3MIZq4sMZol6Ml8EWk8ass6bJLvww7_Az8
Host: localhost
HTTP/1.1 302 Found
Cache-Control: no-store
Content-Language: en
Location: http://localhost/redirect/cf?code=8BsTHUGmlY&state=XOiOKE
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, code for requesting an authorization code for an access token, as per OAuth spec |
client_id | String | Required | a unique string representing the registration information provided by the client |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
state | String | Required | any random string to be returned in the Location header as a query parameter, used to achieve per-request customization |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing uaa.user scope - the authentication for this user |
Implicit Grant
$ curl 'http://localhost/oauth/authorize?response_type=token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=JXFDEwy6ABZIlDg0IunLJw; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:18 GMT; HttpOnly
Cache-Control: no-store
Content-Language: en
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://localhost:8080/app/#token_type=bearer&access_token=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiI4ZTYzZDBlZGVmZDg0MjViYWE4YWUwNThjMjUzYWIxZSIsInN1YiI6ImNlYzAxOGZjLWIzMjQtNGMzZi05YzdhLTM4YmEwYzkzOGJkOCIsInNjb3BlIjpbIm9wZW5pZCJdLCJjbGllbnRfaWQiOiJhcHAiLCJjaWQiOiJhcHAiLCJhenAiOiJhcHAiLCJncmFudF90eXBlIjoiaW1wbGljaXQiLCJ1c2VyX2lkIjoiY2VjMDE4ZmMtYjMyNC00YzNmLTljN2EtMzhiYTBjOTM4YmQ4Iiwib3JpZ2luIjoidWFhIiwidXNlcl9uYW1lIjoibWFyaXNzYSIsImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsImF1dGhfdGltZSI6MTU5NDE3MTM5OCwicmV2X3NpZyI6IjZkNjRlZmI2IiwiaWF0IjoxNTk0MTcxMzk4LCJleHAiOjE1OTQyMTQ1OTgsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJ1YWEiLCJhdWQiOlsiYXBwIiwib3BlbmlkIl19.IhdsB8dKl98E_hOfFWOymx8cZw37iarA1-YA6nxhtcg&expires_in=43199&jti=8e63d0edefd8425baa8ae058c253ab1e
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, token , i.e. an access token |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. |
Response Headers
Name | Description |
---|---|
Location |
Location as defined in the spec includes access_token in the reply fragment if successful |
Implicit Grant with prompt
$ curl 'http://localhost/oauth/authorize?response_type=token&client_id=app&scope=openid&prompt=none&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=token&client_id=app&scope=openid&prompt=none&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Set-Cookie: Current-User=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://localhost:8080/app/#error=login_required&session_state=4c4e7e8073151318d931c369baaf06485c73081ba09d2f37d6359a2afd1534d5.5433b122b6b6b91dfb221a42fb041fb08f913db728f9d4e4149b4f2d2c90c05d
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, token , i.e. an access token |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
prompt | String | Optional | specifies whether to prompt for user authentication. Only value none is supported. |
Response Headers
Name | Description |
---|---|
Location |
Redirect url specified in the request parameters. |
OpenID Connect flow
OpenID Provider Configuration Request
An OpenID Provider Configuration Document MUST be queried using an HTTP GET request at the previously specified path.
$ curl 'http://localhost/.well-known/openid-configuration' -i -X GET \
-H 'Accept: application/json'
GET /.well-known/openid-configuration HTTP/1.1
Accept: application/json
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1239
{
"issuer" : "http://localhost:8080/uaa/oauth/token",
"authorization_endpoint" : "http://localhost/oauth/authorize",
"token_endpoint" : "http://localhost/oauth/token",
"token_endpoint_auth_methods_supported" : [ "client_secret_basic", "client_secret_post" ],
"token_endpoint_auth_signing_alg_values_supported" : [ "RS256", "HS256" ],
"userinfo_endpoint" : "http://localhost/userinfo",
"jwks_uri" : "http://localhost/token_keys",
"scopes_supported" : [ "openid", "profile", "email", "phone", "roles", "user_attributes" ],
"response_types_supported" : [ "code", "code id_token", "id_token", "token id_token" ],
"subject_types_supported" : [ "public" ],
"id_token_signing_alg_values_supported" : [ "RS256", "HS256" ],
"id_token_encryption_alg_values_supported" : [ "none" ],
"claim_types_supported" : [ "normal" ],
"claims_supported" : [ "sub", "user_name", "origin", "iss", "auth_time", "amr", "acr", "client_id", "aud", "zid", "grant_type", "user_id", "azp", "scope", "exp", "iat", "jti", "rev_sig", "cid", "given_name", "family_name", "phone_number", "email" ],
"claims_parameter_supported" : false,
"service_documentation" : "http://docs.cloudfoundry.org/api/uaa/",
"ui_locales_supported" : [ "en-US" ]
}
Response Fields
Path | Type | Description |
---|---|---|
issuer |
String |
URL using the https scheme with no query or fragment component that the OP asserts as its Issuer Identifier. |
authorization_endpoint |
String |
URL of authorization endpoint. |
token_endpoint |
String |
URL of token endpoint. |
userinfo_endpoint |
String |
URL of the OP's UserInfo Endpoint. |
jwks_uri |
String |
URL of the OP's JSON Web Key Set document. |
scopes_supported |
Array |
JSON array containing a list of the OAuth 2.0 scope values that this server supports. |
subject_types_supported |
Array |
JSON array containing a list of the Subject Identifier types that this OP supports. |
token_endpoint_auth_methods_supported |
Array |
JSON array containing a list of Client Authentication methods supported by this Token Endpoint. |
token_endpoint_auth_signing_alg_values_supported |
Array |
JSON array containing a list of the JWS signing algorithms. |
response_types_supported |
Array |
JSON array containing a list of the OAuth 2.0 response_type values that this OP supports. |
id_token_signing_alg_values_supported |
Array |
JSON array containing a list of the JWS signing algorithms (alg values) supported by the OP for the ID Token to encode the Claims in a JWT. |
id_token_encryption_alg_values_supported |
Array |
JSON array containing a list of the JWE encryption algorithms (alg values) supported by the OP. |
claim_types_supported |
Array |
JSON array containing a list of the Claim Types that the OpenID Provider supports. |
claims_supported |
Array |
JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY be able to supply values for. |
claims_parameter_supported |
Boolean |
Boolean value specifying whether the OP supports use of the claims parameter. |
service_documentation |
String |
URL of a page containing human-readable information that developers might want or need to know when using the OpenID Provider. |
ui_locales_supported |
Array |
Languages and scripts supported for the user interface. |
ID token
The authorization request may specify a response type of id_token, and an ID token as defined by OpenID Connect will be included in the fragment of the redirect URL.
$ curl 'http://localhost/oauth/authorize?response_type=id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=3X2vLVsSwaKQDv5ERpCYwu; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:18 GMT; HttpOnly
Cache-Control: no-store
Content-Language: en
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://localhost:8080/app/#token_type=bearer&id_token=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJjZWMwMThmYy1iMzI0LTRjM2YtOWM3YS0zOGJhMGM5MzhiZDgiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTgsImlhdCI6MTU5NDE3MTM5OCwiYXpwIjoiYXBwIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjA2NDdlZjY5YjQwNzQ1ZTM5MjBmM2I3NzNlZDRhZjcyIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImFwcCIsImNpZCI6ImFwcCIsImdyYW50X3R5cGUiOiJpbXBsaWNpdCIsInVzZXJfbmFtZSI6Im1hcmlzc2EiLCJyZXZfc2lnIjoiNmQ2NGVmYjYiLCJ1c2VyX2lkIjoiY2VjMDE4ZmMtYjMyNC00YzNmLTljN2EtMzhiYTBjOTM4YmQ4IiwiYXV0aF90aW1lIjoxNTk0MTcxMzk4fQ.nq4sa0idQXlgLxS-leY6_zXgJY7shG1iT5PEwddtnEM&expires_in=43199&jti=0647ef69b40745e3920f3b773ed4af72
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, id_token |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. |
Response Headers
Name | Description |
---|---|
Location |
Location as defined in the spec includes id_token in the reply fragment if successful |
ID token and Access token
The request may specify that the client expects an ID token as defined by OpenID Connect, and this ID token will be included alongside the access token.
$ curl 'http://localhost/oauth/authorize?response_type=token+id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=token+id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=P5cICFEyhDB75RnhFs1riI; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:18 GMT; HttpOnly
Cache-Control: no-store
Content-Language: en
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://localhost:8080/app/#token_type=bearer&access_token=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiI2YjY3NTBiMThiNzM0NDU5OTI1NTcxZjY3ZjczNGQyZiIsInN1YiI6ImNlYzAxOGZjLWIzMjQtNGMzZi05YzdhLTM4YmEwYzkzOGJkOCIsInNjb3BlIjpbIm9wZW5pZCJdLCJjbGllbnRfaWQiOiJhcHAiLCJjaWQiOiJhcHAiLCJhenAiOiJhcHAiLCJncmFudF90eXBlIjoiaW1wbGljaXQiLCJ1c2VyX2lkIjoiY2VjMDE4ZmMtYjMyNC00YzNmLTljN2EtMzhiYTBjOTM4YmQ4Iiwib3JpZ2luIjoidWFhIiwidXNlcl9uYW1lIjoibWFyaXNzYSIsImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsImF1dGhfdGltZSI6MTU5NDE3MTM5OCwicmV2X3NpZyI6IjZkNjRlZmI2IiwiaWF0IjoxNTk0MTcxMzk4LCJleHAiOjE1OTQyMTQ1OTgsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJ1YWEiLCJhdWQiOlsiYXBwIiwib3BlbmlkIl19.nLYfRTwbFDP8AXIHacLQ1luLyy9ZJ1VdlZsv597d8UA&id_token=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJjZWMwMThmYy1iMzI0LTRjM2YtOWM3YS0zOGJhMGM5MzhiZDgiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTgsImlhdCI6MTU5NDE3MTM5OCwiYXpwIjoiYXBwIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjZiNjc1MGIxOGI3MzQ0NTk5MjU1NzFmNjdmNzM0ZDJmIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImFwcCIsImNpZCI6ImFwcCIsImdyYW50X3R5cGUiOiJpbXBsaWNpdCIsInVzZXJfbmFtZSI6Im1hcmlzc2EiLCJyZXZfc2lnIjoiNmQ2NGVmYjYiLCJ1c2VyX2lkIjoiY2VjMDE4ZmMtYjMyNC00YzNmLTljN2EtMzhiYTBjOTM4YmQ4IiwiYXV0aF90aW1lIjoxNTk0MTcxMzk4fQ.zG5orecDov-U_UlpB32OC7SsBpZJolI17czwV-lNcjU&expires_in=43199&jti=6b6750b18b734459925571f67f734d2f
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, token id_token , indicating both an access token and an ID token. |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. |
Response Headers
Name | Description |
---|---|
Location |
Location as defined in the spec includes access_token and id_token in the reply fragment if successful |
Hybrid flow
The request may specify that the client expects an ID token as defined by OpenID Connect, and this ID token will be included alongside the authorization code.
$ curl 'http://localhost/oauth/authorize?response_type=code+id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D' -i -X GET \
-H 'Accept: application/x-www-form-urlencoded'
GET /oauth/authorize?response_type=code+id_token&client_id=app&scope=openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapp%2F&login_hint=%257B%2522origin%2522%253A%2522uaa%2522%257D HTTP/1.1
Accept: application/x-www-form-urlencoded
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=Pm0gFKEN28V2dG3OgEY6Vo; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:18 GMT; HttpOnly
Cache-Control: no-store
Content-Language: en
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://localhost:8080/app/#token_type=bearer&id_token=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJjZWMwMThmYy1iMzI0LTRjM2YtOWM3YS0zOGJhMGM5MzhiZDgiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTgsImlhdCI6MTU5NDE3MTM5OCwiYXpwIjoiYXBwIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjE1MzQwOTFhYmY5NzQwZTY4YTZmZTEyMTdjZWQyMmI5IiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImFwcCIsImNpZCI6ImFwcCIsImdyYW50X3R5cGUiOiJhdXRob3JpemF0aW9uX2NvZGUiLCJ1c2VyX25hbWUiOiJtYXJpc3NhIiwicmV2X3NpZyI6IjZkNjRlZmI2IiwidXNlcl9pZCI6ImNlYzAxOGZjLWIzMjQtNGMzZi05YzdhLTM4YmEwYzkzOGJkOCIsImF1dGhfdGltZSI6MTU5NDE3MTM5OH0.POMyseCvh1V4wIBJWthZE_xRjbnQ9xK0jpOJ5YEI--0&code=q1GIc56G4m&expires_in=43199&jti=1534091abf9740e68a6fe1217ced22b9
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
response_type | String | Required | Space-delimited list of response types. Here, id_token code , indicating a request for an ID token and an authorization code. |
client_id | String | Required | a unique string representing the registration information provided by the client |
scope | String | Optional | requested scopes, space-delimited |
redirect_uri | String | Optional | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied), optional if pre-registered by the client |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. |
Response Headers
Name | Description |
---|---|
Location |
Location as defined in the spec includes code and id_token in the reply fragment if successful |
Token
The /oauth/token
endpoint requires client authentication to be accessed. Client Authentication can be passed as
as part of the request authorization header, using basic authentication, or as part of the request parameters, using the client_id
and client_secret
parameter
names.
Authorization Code Grant
$ curl 'http://localhost/oauth/token' -i -u 'login:loginsecret' -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=login&client_secret=loginsecret&grant_type=authorization_code&code=3MsXRh8oQA&token_format=opaque&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic bG9naW46bG9naW5zZWNyZXQ=
Accept: application/json
Host: localhost
client_id=login&client_secret=loginsecret&grant_type=authorization_code&code=3MsXRh8oQA&token_format=opaque&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1088
{
"access_token" : "682b871e913742b1bbd54961cbbb30f5",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJkMWQ0MGNjMS0zNGMxLTQwMjEtOGYxMC1jMmMwYWYxMjI4NGYiLCJhdWQiOlsibG9naW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsImV4cCI6MTU5NDIxNDU5NywiaWF0IjoxNTk0MTcxMzk3LCJhenAiOiJsb2dpbiIsInNjb3BlIjpbIm9wZW5pZCJdLCJlbWFpbCI6IlF4dzFuVkB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjY4MmI4NzFlOTEzNzQyYjFiYmQ1NDk2MWNiYmIzMGY1IiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImxvZ2luIiwiY2lkIjoibG9naW4iLCJncmFudF90eXBlIjoiYXV0aG9yaXphdGlvbl9jb2RlIiwidXNlcl9uYW1lIjoiUXh3MW5WQHRlc3Qub3JnIiwicmV2X3NpZyI6Ijg3NGZmMzU5IiwidXNlcl9pZCI6ImQxZDQwY2MxLTM0YzEtNDAyMS04ZjEwLWMyYzBhZjEyMjg0ZiIsImF1dGhfdGltZSI6MTU5NDE3MTM5N30.ZnEjkfrngfiMKiqmqGx3XAccx03P7Y4Q0oEKk059Fzk",
"refresh_token" : "ab94a6e22d1c48a7a7ff3fb99299aed0-r",
"expires_in" : 43199,
"scope" : "openid oauth.approvals",
"jti" : "682b871e913742b1bbd54961cbbb30f5"
}
Request Headers
Name | Description |
---|---|
Authorization |
Client ID and secret may be passed as a basic authorization header, per RFC 6749 or as request parameters. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
redirect_uri | String | Required if provided on authorization request | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied) |
code | String | Required | the authorization code, obtained from /oauth/authorize , issued for the user |
grant_type | String | Required | the type of authentication being used to obtain the token, in this case authorization_code |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
Client Credentials Grant
Without Authorization
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=login&client_secret=loginsecret&scope=scim.write&grant_type=client_credentials&token_format=opaque'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: localhost
client_id=login&client_secret=loginsecret&scope=scim.write&grant_type=client_credentials&token_format=opaque
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 180
{
"access_token" : "b689fc39603a41e992cc39e6963e5c6f",
"token_type" : "bearer",
"expires_in" : 43199,
"scope" : "scim.write",
"jti" : "b689fc39603a41e992cc39e6963e5c6f"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
grant_type | String | Required | the type of authentication being used to obtain the token, in this case client_credentials |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
scope | String | Optional | The list of scopes requested for the token. Use when you wish to reduce the number of scopes the token will have. |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized for this client. This list is derived from the authorities configured on the client. |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
With Authorization
$ curl 'http://localhost/oauth/token' -i -u 'login:loginsecret' -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'grant_type=client_credentials&scope=scim.write&token_format=opaque'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Authorization: Basic bG9naW46bG9naW5zZWNyZXQ=
Host: localhost
grant_type=client_credentials&scope=scim.write&token_format=opaque
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 180
{
"access_token" : "126ec512126b4f42a06f50bbe211ce02",
"token_type" : "bearer",
"expires_in" : 43199,
"scope" : "scim.write",
"jti" : "126ec512126b4f42a06f50bbe211ce02"
}
Request Header
Name | Description |
---|---|
Authorization |
Base64 encoded client details in the format: Basic client_id:client_secret |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
grant_type | String | Required | the type of authentication being used to obtain the token, in this case client_credentials |
scope | String | Optional | The list of scopes requested for the token. Use when you wish to reduce the number of scopes the token will have. |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized for this client. This list is derived from the authorities configured on the client. |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
Password Grant
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=app&client_secret=appclientsecret&grant_type=password&username=naKwb9%40test.org&password=secr3T&token_format=opaque&login_hint=%7B%22origin%22%3A%22uaa%22%7D'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: localhost
client_id=app&client_secret=appclientsecret&grant_type=password&username=naKwb9%40test.org&password=secr3T&token_format=opaque&login_hint=%7B%22origin%22%3A%22uaa%22%7D
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1140
{
"access_token" : "d226c594197b4c5889d020c4843cf6e7",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMzFmZjllYS0yNTMyLTQwZGQtYTk1YS1iMDQ3ZTBmZTlkYjEiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTAsImlhdCI6MTU5NDE3MTM5MCwiYW1yIjpbInB3ZCJdLCJhenAiOiJhcHAiLCJzY29wZSI6WyJvcGVuaWQiXSwiZW1haWwiOiJuYUt3YjlAdGVzdC5vcmciLCJ6aWQiOiJ1YWEiLCJvcmlnaW4iOiJ1YWEiLCJqdGkiOiJkMjI2YzU5NDE5N2I0YzU4ODlkMDIwYzQ4NDNjZjZlNyIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJjbGllbnRfaWQiOiJhcHAiLCJjaWQiOiJhcHAiLCJncmFudF90eXBlIjoicGFzc3dvcmQiLCJ1c2VyX25hbWUiOiJuYUt3YjlAdGVzdC5vcmciLCJyZXZfc2lnIjoiYzZmMjFlOTkiLCJ1c2VyX2lkIjoiMTMxZmY5ZWEtMjUzMi00MGRkLWE5NWEtYjA0N2UwZmU5ZGIxIiwiYXV0aF90aW1lIjoxNTk0MTcxMzkwfQ.tVi6TsMwt0DpGs1EEKlVUyczxrhb6kU5Lam3_C7tzdQ",
"refresh_token" : "dedfa8c7ab8d449680b0f0e360e1176b-r",
"expires_in" : 43199,
"scope" : "scim.userids openid cloud_controller.read password.write cloud_controller.write",
"jti" : "d226c594197b4c5889d020c4843cf6e7"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
grant_type | String | Required | the type of authentication being used to obtain the token, in this case password |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
username | String | Required | the username for the user trying to get a token |
password | String | Required | the password for the user trying to get a token |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. Note that this identity provider must support the grant type password . |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
Password Grant with MFA
A password grant can be completed when multi-factor authentication is enabled.
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=app&client_secret=appclientsecret&grant_type=password&username=WR3bzM%40test.org&password=secr3T&mfaCode=568667&token_format=opaque&login_hint=%7B%22origin%22%3A%22uaa%22%7D'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: localhost
client_id=app&client_secret=appclientsecret&grant_type=password&username=WR3bzM%40test.org&password=secr3T&mfaCode=568667&token_format=opaque&login_hint=%7B%22origin%22%3A%22uaa%22%7D
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1156
{
"access_token" : "c891b0358d8c41a782747d72b2cd474f",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJiZjRkNjU4NS1mYmI5LTQ5NzAtYTdhOS02YzlmOGRiMWU1N2MiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTYsImlhdCI6MTU5NDE3MTM5NiwiYW1yIjpbIm1mYSIsIm90cCIsInB3ZCJdLCJhenAiOiJhcHAiLCJzY29wZSI6WyJvcGVuaWQiXSwiZW1haWwiOiJXUjNiek1AdGVzdC5vcmciLCJ6aWQiOiJ1YWEiLCJvcmlnaW4iOiJ1YWEiLCJqdGkiOiJjODkxYjAzNThkOGM0MWE3ODI3NDdkNzJiMmNkNDc0ZiIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJjbGllbnRfaWQiOiJhcHAiLCJjaWQiOiJhcHAiLCJncmFudF90eXBlIjoicGFzc3dvcmQiLCJ1c2VyX25hbWUiOiJXUjNiek1AdGVzdC5vcmciLCJyZXZfc2lnIjoiYmM0MmI2NjMiLCJ1c2VyX2lkIjoiYmY0ZDY1ODUtZmJiOS00OTcwLWE3YTktNmM5ZjhkYjFlNTdjIiwiYXV0aF90aW1lIjoxNTk0MTcxMzk1fQ.KkIkLItV_t6oZjVpfszmT1tZviUK3Oxnrt7biJ_CK1Y",
"refresh_token" : "e1151a3f70984445b6d7bf2ac659b425-r",
"expires_in" : 43199,
"scope" : "scim.userids openid cloud_controller.read password.write cloud_controller.write",
"jti" : "c891b0358d8c41a782747d72b2cd474f"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
grant_type | String | Required | the type of authentication being used to obtain the token, in this case password |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
username | String | Required | the username for the user trying to get a token |
password | String | Required | the password for the user trying to get a token |
mfaCode | Number | Required | A one time passcode from a registered multi-factor generator |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
login_hint | String | Optional | UAA 4.19.0 Indicates the identity provider to be used. The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider. Note that this identity provider must support the grant type password . |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
One-time Passcode
$ curl 'http://localhost/oauth/token' -i -u 'app:appclientsecret' -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'grant_type=password&passcode=2euejrvGvQ&token_format=opaque'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Authorization: Basic YXBwOmFwcGNsaWVudHNlY3JldA==
Host: localhost
grant_type=password&passcode=2euejrvGvQ&token_format=opaque
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1081
{
"access_token" : "9e5f78f4671741ee934d904aab63fca3",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiIwZWNjYzdkYi1lOWE5LTQ5YWUtOTA2Ny1iYjM5NTIyYjNkYTYiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTAsImlhdCI6MTU5NDE3MTM5MCwiYXpwIjoiYXBwIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibWFyaXNzYUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6IjllNWY3OGY0NjcxNzQxZWU5MzRkOTA0YWFiNjNmY2EzIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImFwcCIsImNpZCI6ImFwcCIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfbmFtZSI6Im1hcmlzc2EiLCJyZXZfc2lnIjoiNmMxZWJkZDIiLCJ1c2VyX2lkIjoiMGVjY2M3ZGItZTlhOS00OWFlLTkwNjctYmIzOTUyMmIzZGE2In0.btNiP3rGae-TkoalY-IlMs3_6R2UwTHIFqUhdLyJS-s",
"refresh_token" : "e955c1929db24b329d9c5f35b27d00f7-r",
"expires_in" : 43199,
"scope" : "scim.userids openid cloud_controller.read password.write cloud_controller.write",
"jti" : "9e5f78f4671741ee934d904aab63fca3"
}
Request Header
Name | Description |
---|---|
Authorization |
Base64 encoded client details in the format: Basic client_id:client_secret |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
grant_type | String | Required | the type of authentication being used to obtain the token, in this case password |
passcode | String | Required | the one-time passcode for the user which can be retrieved by going to /passcode |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
User Token Grant
A user_token
grant, is a flow that allows the generation of a refresh_token for another client.
The requesting client, must have grant_type=user_token
and the bearer token for this request must have uaa.user
and be a token that represents an authenticated user.
The idea with this grant flow, is that a user can preapprove a token grant for another client, rather than having to participate in the approval process when the client needs the access token.
The refresh_token
that results from this grant, is opaque, and can only be exchanged by the client it was intended for.
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Authorization: Bearer cb1af4eca259405196704827e72d7d39' \
-H 'Accept: application/json' \
-d 'client_id=app&grant_type=user_token&scope=openid&token_format=jwt'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer cb1af4eca259405196704827e72d7d39
Accept: application/json
Host: localhost
client_id=app&grant_type=user_token&scope=openid&token_format=jwt
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 206
{
"access_token" : null,
"token_type" : "bearer",
"refresh_token" : "3d369d3c38cd44cea2d7f039da95c901-r",
"expires_in" : 43199,
"scope" : "openid",
"jti" : "3d369d3c38cd44cea2d7f039da95c901-r"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | The client ID of the receiving client, this client must have refresh_token grant type |
grant_type | String | Required | The type of token grant requested, in this case user_token |
token_format | String | Optional | This parameter is ignored. The refresh_token will always be opaque |
scope | String | Optional | The list of scopes requested for the token. Use when you wish to reduce the number of scopes the token will have. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
Null |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
SAML2 Bearer Grant
The SAML 2.0 bearer grant allows to request an OAuth 2.0 access token with a SAML 2.0 bearer assertion. The flow is defined in
RFC 7522. The requesting client, must have grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer
.
In addition the requesting client must either allow the IDP in allowedproviders
or omit the property so that any trusted IDP is allowed.
The trust to the assertion issuer is reused from the SAML 2.0 WebSSO profiles.
This grant enables an App2App mechanism with SSO. Typical scenarios are applications outside of CF, which consume a service within the CF world.
The endpoint of the bearer assertion is /oauth/token/alias/<endityid>
so the Recipient attribute in
the bearer assertion must point to the corresponding URI, e.g. http://localhost:8080/uaa/oauth/token/alias/cloudfoundry-saml-login.
$ curl 'http://c1fao1.localhost:8080/uaa/oauth/token/alias/c1fao1.cloudfoundry-saml-login' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-H 'Host: c1fao1.localhost' \
-d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Asaml2-bearer&client_id=testclient0Odvbn&client_secret=secret&assertion=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDI6QXNzZXJ0aW9uIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBJRD0iYTNnODg1OTRmZ2NqZWVmajMwZGE5N2YxNzBjOWFmYyIgSXNzdWVJbnN0YW50PSIyMDIwLTA3LTA4VDAxOjIzOjEzLjA1N1oiIFZlcnNpb249IjIuMCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48c2FtbDI6SXNzdWVyPmMxZmFvMS5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbjwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8-PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjYTNnODg1OTRmZ2NqZWVmajMwZGE5N2YxNzBjOWFmYyI-PGRzOlRyYW5zZm9ybXM-PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyI-PGVjOkluY2x1c2l2ZU5hbWVzcGFjZXMgeG1sbnM6ZWM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIgUHJlZml4TGlzdD0ieHMiLz48L2RzOlRyYW5zZm9ybT48L2RzOlRyYW5zZm9ybXM-PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8-PGRzOkRpZ2VzdFZhbHVlPjI5elZNdlBacCtJa2x6WVZZVVoxUUhidXFGZz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU-aDAwLysyNU5mU0U5cFdQYktOMitXeEg4Ym8zWFVEOEJvckllT1BtOS9GVlRJWGNsaUR5bnJFTGh3OUJTWXBWUHIzdnNjSWdCenFlcnJ5MWZDNnNEREh6RGZkeURXRGZXU2hpWDRlSkJnNWdQQWNpNC9rTko2Tk5hSFJDaVY1TmxXT1YvQlRoN0pOb1RMcHVzUENRRXNnQ25nZjdKVklGL0R0K1VOZVpEUjRrPTwvZHM6U2lnbmF0dXJlVmFsdWU-PGRzOktleUluZm8-PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU-TUlJRFNUQ0NBcktnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQjhNUXN3Q1FZRFZRUUdFd0poZHpFT01Bd0dBMVVFQ0JNRgpZWEoxWW1FeERqQU1CZ05WQkFvVEJXRnlkV0poTVE0d0RBWURWUVFIRXdWaGNuVmlZVEVPTUF3R0ExVUVDeE1GWVhKMVltRXhEakFNCkJnTlZCQU1UQldGeWRXSmhNUjB3R3dZSktvWklodmNOQVFrQkZnNWhjblZpWVVCaGNuVmlZUzVoY2pBZUZ3MHhOVEV4TWpBeU1qSTIKTWpkYUZ3MHhOakV4TVRreU1qSTJNamRhTUh3eEN6QUpCZ05WQkFZVEFtRjNNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRQpDaE1GWVhKMVltRXhEakFNQmdOVkJBY1RCV0Z5ZFdKaE1RNHdEQVlEVlFRTEV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4CkhUQWJCZ2txaGtpRzl3MEJDUUVXRG1GeWRXSmhRR0Z5ZFdKaExtRnlNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKZ1FESHRDNWdVWHhCS3BFcVpUTGtOdkZ3TkduTklrZ2dOT3dPUVZOYnBPMFdWSElpdmlnNUwzOVdxUzl1MGhuQStPN01DQS9LbHJBUgo0YlhhZVZWaHdmVVBZQktJcGFhVFdGUVI1Y1RSMVVGWkpML09GOXZBZnBPd3pub0Q2NkREQ25RVnBiQ2p0RFlXWCt4NmlteG44SENZCnhoTW9sNlpuVGJTc0ZXNlZaakZNalFJREFRQUJvNEhhTUlIWE1CMEdBMVVkRGdRV0JCVHgwbER6akgvaU9Cbk9TUWFTRVdRTHgxc3kKR0RDQnB3WURWUjBqQklHZk1JR2NnQlR4MGxEempIL2lPQm5PU1FhU0VXUUx4MXN5R0tHQmdLUitNSHd4Q3pBSkJnTlZCQVlUQW1GMwpNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRUNoTUZZWEoxWW1FeERqQU1CZ05WQkFjVEJXRnlkV0poTVE0d0RBWURWUVFMCkV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUZ5ZFdKaFFHRnlkV0poTG1GeWdnRUEKTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFZdkJKMEhPWmJiSENsWG1HVWpHcytHUyt4QzFGTy9hbQoyc3VDU1lxTkI5ZHlNWGZPV2lKMStUTEprK28vWVp0OHZ1eENLZGNaWWdsNGwvTDZQeEo5ODJTUmhjODNaVzJka0FaSTRNMC9VZDNvCmVQZTg0azhqbTNBN0V2SDV3aTVodkNrS1JwdVJCd24zRWkrakNSb3V4VGJ6S1BzdUNWQisxc055eE1UWHpmMD08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbDI6U3ViamVjdD48c2FtbDI6TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPlNhbWwyQmVhcmVySW50ZWdyYXRpb25Vc2VyPC9zYW1sMjpOYW1lSUQ-PHNhbWwyOlN1YmplY3RDb25maXJtYXRpb24gTWV0aG9kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyIj48c2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbkRhdGEgTm90T25PckFmdGVyPSIyMDIwLTA3LTA4VDAyOjIzOjEzLjA3M1oiIFJlY2lwaWVudD0iaHR0cDovL2MxZmFvMS5sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4vYWxpYXMvYzFmYW8xLmNsb3VkZm91bmRyeS1zYW1sLWxvZ2luIi8-PC9zYW1sMjpTdWJqZWN0Q29uZmlybWF0aW9uPjwvc2FtbDI6U3ViamVjdD48c2FtbDI6Q29uZGl0aW9ucyBOb3RCZWZvcmU9IjIwMjAtMDctMDhUMDE6MjM6MTMuMDU4WiIgTm90T25PckFmdGVyPSIyMDIwLTA3LTA4VDAyOjIzOjEzLjA3M1oiPjxzYW1sMjpBdWRpZW5jZVJlc3RyaWN0aW9uPjxzYW1sMjpBdWRpZW5jZT5jMWZhbzEuY2xvdWRmb3VuZHJ5LXNhbWwtbG9naW48L3NhbWwyOkF1ZGllbmNlPjwvc2FtbDI6QXVkaWVuY2VSZXN0cmljdGlvbj48L3NhbWwyOkNvbmRpdGlvbnM-PHNhbWwyOkF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAyMC0wNy0wOFQwMToyMzoxMy4wNTdaIiBTZXNzaW9uSW5kZXg9ImFhMzNiNDJpYmRkNmk5OTQ1NWhhaTExMWJpZGk5YyI-PHNhbWwyOkF1dGhuQ29udGV4dD48c2FtbDI6QXV0aG5Db250ZXh0Q2xhc3NSZWY-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQ8L3NhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPjwvc2FtbDI6QXV0aG5Db250ZXh0Pjwvc2FtbDI6QXV0aG5TdGF0ZW1lbnQ-PHNhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImF1dGhvcml0aWVzIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI-dWFhLnVzZXI8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0iZW1haWwiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhQHRlc3Rpbmcub3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImlkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI-YWJmNjEyNjAtMTdhNi00NjA5LTgxYTQtNTY5ODhmMjMyZjJmPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im5hbWUiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im9yaWdpbiI-PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPnVhYTwvc2FtbDI6QXR0cmlidXRlVmFsdWU-PC9zYW1sMjpBdHRyaWJ1dGU-PHNhbWwyOkF0dHJpYnV0ZSBOYW1lPSJ6b25lSWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj51YWE8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjwvc2FtbDI6QXR0cmlidXRlU3RhdGVtZW50Pjwvc2FtbDI6QXNzZXJ0aW9uPg&scope=openid'
POST /uaa/oauth/token/alias/c1fao1.cloudfoundry-saml-login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: c1fao1.localhost
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Asaml2-bearer&client_id=testclient0Odvbn&client_secret=secret&assertion=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDI6QXNzZXJ0aW9uIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBJRD0iYTNnODg1OTRmZ2NqZWVmajMwZGE5N2YxNzBjOWFmYyIgSXNzdWVJbnN0YW50PSIyMDIwLTA3LTA4VDAxOjIzOjEzLjA1N1oiIFZlcnNpb249IjIuMCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48c2FtbDI6SXNzdWVyPmMxZmFvMS5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbjwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8-PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjYTNnODg1OTRmZ2NqZWVmajMwZGE5N2YxNzBjOWFmYyI-PGRzOlRyYW5zZm9ybXM-PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyI-PGVjOkluY2x1c2l2ZU5hbWVzcGFjZXMgeG1sbnM6ZWM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIgUHJlZml4TGlzdD0ieHMiLz48L2RzOlRyYW5zZm9ybT48L2RzOlRyYW5zZm9ybXM-PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8-PGRzOkRpZ2VzdFZhbHVlPjI5elZNdlBacCtJa2x6WVZZVVoxUUhidXFGZz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU-aDAwLysyNU5mU0U5cFdQYktOMitXeEg4Ym8zWFVEOEJvckllT1BtOS9GVlRJWGNsaUR5bnJFTGh3OUJTWXBWUHIzdnNjSWdCenFlcnJ5MWZDNnNEREh6RGZkeURXRGZXU2hpWDRlSkJnNWdQQWNpNC9rTko2Tk5hSFJDaVY1TmxXT1YvQlRoN0pOb1RMcHVzUENRRXNnQ25nZjdKVklGL0R0K1VOZVpEUjRrPTwvZHM6U2lnbmF0dXJlVmFsdWU-PGRzOktleUluZm8-PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU-TUlJRFNUQ0NBcktnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQjhNUXN3Q1FZRFZRUUdFd0poZHpFT01Bd0dBMVVFQ0JNRgpZWEoxWW1FeERqQU1CZ05WQkFvVEJXRnlkV0poTVE0d0RBWURWUVFIRXdWaGNuVmlZVEVPTUF3R0ExVUVDeE1GWVhKMVltRXhEakFNCkJnTlZCQU1UQldGeWRXSmhNUjB3R3dZSktvWklodmNOQVFrQkZnNWhjblZpWVVCaGNuVmlZUzVoY2pBZUZ3MHhOVEV4TWpBeU1qSTIKTWpkYUZ3MHhOakV4TVRreU1qSTJNamRhTUh3eEN6QUpCZ05WQkFZVEFtRjNNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRQpDaE1GWVhKMVltRXhEakFNQmdOVkJBY1RCV0Z5ZFdKaE1RNHdEQVlEVlFRTEV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4CkhUQWJCZ2txaGtpRzl3MEJDUUVXRG1GeWRXSmhRR0Z5ZFdKaExtRnlNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKZ1FESHRDNWdVWHhCS3BFcVpUTGtOdkZ3TkduTklrZ2dOT3dPUVZOYnBPMFdWSElpdmlnNUwzOVdxUzl1MGhuQStPN01DQS9LbHJBUgo0YlhhZVZWaHdmVVBZQktJcGFhVFdGUVI1Y1RSMVVGWkpML09GOXZBZnBPd3pub0Q2NkREQ25RVnBiQ2p0RFlXWCt4NmlteG44SENZCnhoTW9sNlpuVGJTc0ZXNlZaakZNalFJREFRQUJvNEhhTUlIWE1CMEdBMVVkRGdRV0JCVHgwbER6akgvaU9Cbk9TUWFTRVdRTHgxc3kKR0RDQnB3WURWUjBqQklHZk1JR2NnQlR4MGxEempIL2lPQm5PU1FhU0VXUUx4MXN5R0tHQmdLUitNSHd4Q3pBSkJnTlZCQVlUQW1GMwpNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRUNoTUZZWEoxWW1FeERqQU1CZ05WQkFjVEJXRnlkV0poTVE0d0RBWURWUVFMCkV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUZ5ZFdKaFFHRnlkV0poTG1GeWdnRUEKTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFZdkJKMEhPWmJiSENsWG1HVWpHcytHUyt4QzFGTy9hbQoyc3VDU1lxTkI5ZHlNWGZPV2lKMStUTEprK28vWVp0OHZ1eENLZGNaWWdsNGwvTDZQeEo5ODJTUmhjODNaVzJka0FaSTRNMC9VZDNvCmVQZTg0azhqbTNBN0V2SDV3aTVodkNrS1JwdVJCd24zRWkrakNSb3V4VGJ6S1BzdUNWQisxc055eE1UWHpmMD08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbDI6U3ViamVjdD48c2FtbDI6TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPlNhbWwyQmVhcmVySW50ZWdyYXRpb25Vc2VyPC9zYW1sMjpOYW1lSUQ-PHNhbWwyOlN1YmplY3RDb25maXJtYXRpb24gTWV0aG9kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyIj48c2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbkRhdGEgTm90T25PckFmdGVyPSIyMDIwLTA3LTA4VDAyOjIzOjEzLjA3M1oiIFJlY2lwaWVudD0iaHR0cDovL2MxZmFvMS5sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4vYWxpYXMvYzFmYW8xLmNsb3VkZm91bmRyeS1zYW1sLWxvZ2luIi8-PC9zYW1sMjpTdWJqZWN0Q29uZmlybWF0aW9uPjwvc2FtbDI6U3ViamVjdD48c2FtbDI6Q29uZGl0aW9ucyBOb3RCZWZvcmU9IjIwMjAtMDctMDhUMDE6MjM6MTMuMDU4WiIgTm90T25PckFmdGVyPSIyMDIwLTA3LTA4VDAyOjIzOjEzLjA3M1oiPjxzYW1sMjpBdWRpZW5jZVJlc3RyaWN0aW9uPjxzYW1sMjpBdWRpZW5jZT5jMWZhbzEuY2xvdWRmb3VuZHJ5LXNhbWwtbG9naW48L3NhbWwyOkF1ZGllbmNlPjwvc2FtbDI6QXVkaWVuY2VSZXN0cmljdGlvbj48L3NhbWwyOkNvbmRpdGlvbnM-PHNhbWwyOkF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAyMC0wNy0wOFQwMToyMzoxMy4wNTdaIiBTZXNzaW9uSW5kZXg9ImFhMzNiNDJpYmRkNmk5OTQ1NWhhaTExMWJpZGk5YyI-PHNhbWwyOkF1dGhuQ29udGV4dD48c2FtbDI6QXV0aG5Db250ZXh0Q2xhc3NSZWY-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQ8L3NhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPjwvc2FtbDI6QXV0aG5Db250ZXh0Pjwvc2FtbDI6QXV0aG5TdGF0ZW1lbnQ-PHNhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImF1dGhvcml0aWVzIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI-dWFhLnVzZXI8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0iZW1haWwiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhQHRlc3Rpbmcub3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImlkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI-YWJmNjEyNjAtMTdhNi00NjA5LTgxYTQtNTY5ODhmMjMyZjJmPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im5hbWUiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im9yaWdpbiI-PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPnVhYTwvc2FtbDI6QXR0cmlidXRlVmFsdWU-PC9zYW1sMjpBdHRyaWJ1dGU-PHNhbWwyOkF0dHJpYnV0ZSBOYW1lPSJ6b25lSWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj51YWE8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjwvc2FtbDI6QXR0cmlidXRlU3RhdGVtZW50Pjwvc2FtbDI6QXNzZXJ0aW9uPg&scope=openid
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
Content-Disposition: inline;filename=f.txt
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 2040
{
"access_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiI2MjliZDFiNzAwY2M0ODE4OGU4MTM2YjY5M2Q0YjJjZCIsInN1YiI6ImZiZTdlZjY2LTI5OGYtNDhmZC05NzQyLTA3MjhjYTJhZjU4NiIsInNjb3BlIjpbIm9wZW5pZCJdLCJjbGllbnRfaWQiOiJ0ZXN0Y2xpZW50ME9kdmJuIiwiY2lkIjoidGVzdGNsaWVudDBPZHZibiIsImF6cCI6InRlc3RjbGllbnQwT2R2Ym4iLCJncmFudF90eXBlIjoidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6c2FtbDItYmVhcmVyIiwidXNlcl9pZCI6ImZiZTdlZjY2LTI5OGYtNDhmZC05NzQyLTA3MjhjYTJhZjU4NiIsIm9yaWdpbiI6ImMxZmFvMS5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbiIsInVzZXJfbmFtZSI6IlNhbWwyQmVhcmVySW50ZWdyYXRpb25Vc2VyIiwiZW1haWwiOiJTYW1sMkJlYXJlckludGVncmF0aW9uVXNlckB0aGlzLWRlZmF1bHQtd2FzLW5vdC1jb25maWd1cmVkLmludmFsaWQiLCJyZXZfc2lnIjoiZDdhNTFmOTEiLCJpYXQiOjE1OTQxNzEzOTMsImV4cCI6MTU5NDE3MTk5MywiaXNzIjoiaHR0cDovL2MxZmFvMS5sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJjMWZhbzEiLCJhdWQiOlsidGVzdGNsaWVudDBPZHZibiIsIm9wZW5pZCJdfQ.-mJz2Q9jICzXQ68yIvZANVU-lQHXLSStQeIow22yV28",
"token_type" : "bearer",
"refresh_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiJjNTI2YmMzNmQ2M2E0NjMxYjZkYzQ0M2FiZGU4NWIwZi1yIiwic3ViIjoiZmJlN2VmNjYtMjk4Zi00OGZkLTk3NDItMDcyOGNhMmFmNTg2IiwiaWF0IjoxNTk0MTcxMzkzLCJleHAiOjE1OTY3NjMzOTMsImNpZCI6InRlc3RjbGllbnQwT2R2Ym4iLCJjbGllbnRfaWQiOiJ0ZXN0Y2xpZW50ME9kdmJuIiwiaXNzIjoiaHR0cDovL2MxZmFvMS5sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJjMWZhbzEiLCJhdWQiOlsidGVzdGNsaWVudDBPZHZibiIsIm9wZW5pZCJdLCJncmFudGVkX3Njb3BlcyI6WyJvcGVuaWQiXSwiZ3JhbnRfdHlwZSI6InVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOnNhbWwyLWJlYXJlciIsInVzZXJfbmFtZSI6IlNhbWwyQmVhcmVySW50ZWdyYXRpb25Vc2VyIiwib3JpZ2luIjoiYzFmYW8xLmNsb3VkZm91bmRyeS1zYW1sLWxvZ2luIiwidXNlcl9pZCI6ImZiZTdlZjY2LTI5OGYtNDhmZC05NzQyLTA3MjhjYTJhZjU4NiIsInJldl9zaWciOiJkN2E1MWY5MSJ9.DVo6NoDOshJQG_3CQgO2k379xQ7Qy7SMpPJA6NcT5mU",
"expires_in" : 599,
"scope" : "openid",
"jti" : "629bd1b700cc48188e8136b693d4b2cd"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | The client ID of the receiving client, this client must have urn:ietf:params:oauth:grant-type:saml2-bearer grant type |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
grant_type | String | Required | The type of token grant requested, in this case urn:ietf:params:oauth:grant-type:saml2-bearer |
assertion | String | Required | An XML based SAML 2.0 bearer assertion, which is Base64URl encoded. |
scope | String | Optional | The list of scopes requested for the token. Use when you wish to reduce the number of scopes the token will have. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
token_type |
String |
The type of the access token issued, always bearer |
expires_in |
Number |
Number of seconds of lifetime for an access_token, when retrieved |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
JWT Bearer Token Grant
The JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
allows to request an OAuth 2.0 access token with a JWT id_token bearer assertion. The flow is defined in
RFC 7523. The requesting client, must have grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
.
In addition the requesting client must either allow the IDP in allowedproviders
or omit the property so that any trusted IDP is allowed.
The trust to the assertion, the issuer claim is used to select an OIDC provider (IDP) configured in the
UAA database. If multiple providers exists that have the same issuer, the grant will fail.
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'client_id=wb6w1nmnh0rs&client_secret=secret&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&token_format=opaque&response_type=token+id_token&scope=openid&assertion=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiI2MDgyMmE0ZC02NzkwLTQ0NmEtOGI5Yy1mZTI2ZWQxZDk0ZmUiLCJhdWQiOlsidENJZkpUTmFZTmdjIl0sImlzcyI6Imh0dHA6Ly9nYm9lcmk5dnM0eTQubG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiZXhwIjoxNTk0MjE0NTc3LCJpYXQiOjE1OTQxNzEzNzcsImFtciI6WyJwd2QiXSwiYXpwIjoidENJZkpUTmFZTmdjIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibnhreWw0bmF6bzN5QHRlc3Qub3JnIiwiemlkIjoiZ2JvZXJpOXZzNHk0Iiwib3JpZ2luIjoidWFhIiwianRpIjoiMWJmZjQyM2UxNzk0NDU0MmI2ZWZhZDk2YTdhNzVlZWUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiY2xpZW50X2lkIjoidENJZkpUTmFZTmdjIiwiY2lkIjoidENJZkpUTmFZTmdjIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9uYW1lIjoibnhreWw0bmF6bzN5IiwicmV2X3NpZyI6ImQyYmM5Y2E5IiwidXNlcl9pZCI6IjYwODIyYTRkLTY3OTAtNDQ2YS04YjljLWZlMjZlZDFkOTRmZSIsImF1dGhfdGltZSI6MTU5NDE3MTM3N30.8aOR9WG0M7azR_NwDBqzCEZ3ujPW9BU2JjSaQtB_Deg'
POST /oauth/token HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Host: localhost
client_id=wb6w1nmnh0rs&client_secret=secret&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&token_format=opaque&response_type=token+id_token&scope=openid&assertion=eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiI2MDgyMmE0ZC02NzkwLTQ0NmEtOGI5Yy1mZTI2ZWQxZDk0ZmUiLCJhdWQiOlsidENJZkpUTmFZTmdjIl0sImlzcyI6Imh0dHA6Ly9nYm9lcmk5dnM0eTQubG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiZXhwIjoxNTk0MjE0NTc3LCJpYXQiOjE1OTQxNzEzNzcsImFtciI6WyJwd2QiXSwiYXpwIjoidENJZkpUTmFZTmdjIiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibnhreWw0bmF6bzN5QHRlc3Qub3JnIiwiemlkIjoiZ2JvZXJpOXZzNHk0Iiwib3JpZ2luIjoidWFhIiwianRpIjoiMWJmZjQyM2UxNzk0NDU0MmI2ZWZhZDk2YTdhNzVlZWUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiY2xpZW50X2lkIjoidENJZkpUTmFZTmdjIiwiY2lkIjoidENJZkpUTmFZTmdjIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9uYW1lIjoibnhreWw0bmF6bzN5IiwicmV2X3NpZyI6ImQyYmM5Y2E5IiwidXNlcl9pZCI6IjYwODIyYTRkLTY3OTAtNDQ2YS04YjljLWZlMjZlZDFkOTRmZSIsImF1dGhfdGltZSI6MTU5NDE3MTM3N30.8aOR9WG0M7azR_NwDBqzCEZ3ujPW9BU2JjSaQtB_Deg
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 176
{
"access_token" : "5ad0f692374446ddb770aa7f0b1ed3e9",
"token_type" : "bearer",
"expires_in" : 43199,
"scope" : "openid",
"jti" : "5ad0f692374446ddb770aa7f0b1ed3e9"
}
Request Headers
Name | Description |
---|---|
Authorization |
Uses basic authorization with base64(resource_server:shared_secret) assuming the caller (a resource server) is actually also a registered client and has uaa.resource authority |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
assertion | String | Required | JWT token identifying representing the user to be authenticated |
client_id | String | Required | Required, client with |
client_secret | String | Required | Required unless a basic authorization header is used |
grant_type | String | Required | Must be set to urn:ietf:params:oauth:grant-type:jwt-bearer |
scope | String | Optional | Optional parameter to limit the number of scopes in the scope claim of the access token |
response_type | String | Optional | May be set to token or token id_token or id_token |
token_format | String | Optional | May be set to opaque to retrieve revocable and non identifiable access token |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
Access token generated by this grant |
token_type |
String |
Will always be bearer |
scope |
String |
List of scopes present in the scope claim in the access token |
expires_in |
Number |
Number of seconds before this token expires from the time of issuance |
jti |
String |
The unique token ID |
Refresh Token
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=app&client_secret=appclientsecret&grant_type=refresh_token&token_format=opaque&refresh_token=4a89b21951064472bba48387e97d8699-r'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: localhost
client_id=app&client_secret=appclientsecret&grant_type=refresh_token&token_format=opaque&refresh_token=4a89b21951064472bba48387e97d8699-r
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1138
{
"access_token" : "434136d22d68427f9612ba9405155a6a",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiI5MTkzMjY2OC0xZjEyLTRiOWEtYjFjNi0zOTZmMGYyMDI3NjYiLCJhdWQiOlsiYXBwIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJleHAiOjE1OTQyMTQ1OTYsImlhdCI6MTU5NDE3MTM5NiwiYW1yIjpbInB3ZCJdLCJhenAiOiJhcHAiLCJzY29wZSI6WyJvcGVuaWQiXSwiZW1haWwiOiJpdDRLWHdAdGVzdC5vcmciLCJ6aWQiOiJ1YWEiLCJvcmlnaW4iOiJ1YWEiLCJqdGkiOiJkN2FiZjg1MGNjMzA0YzhjYjQ0MDg3ZTdkMTdhZDhlMyIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJjbGllbnRfaWQiOiJhcHAiLCJjaWQiOiJhcHAiLCJncmFudF90eXBlIjoicGFzc3dvcmQiLCJ1c2VyX25hbWUiOiJpdDRLWHdAdGVzdC5vcmciLCJyZXZfc2lnIjoiZjBjOTQ4YiIsInVzZXJfaWQiOiI5MTkzMjY2OC0xZjEyLTRiOWEtYjFjNi0zOTZmMGYyMDI3NjYiLCJhdXRoX3RpbWUiOjE1OTQxNzEzOTZ9.XpVJiEzQkaVbKsrYhHFo3XOKmWZAZYFqJAEQVN_aMPs",
"refresh_token" : "4a89b21951064472bba48387e97d8699-r",
"expires_in" : 43199,
"scope" : "scim.userids cloud_controller.read password.write cloud_controller.write openid",
"jti" : "434136d22d68427f9612ba9405155a6a"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
grant_type | String | Required | the type of authentication being used to obtain the token, in this case refresh_token |
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
refresh_token | String | Required | the refresh_token that was returned along with the access token. |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
OpenID Connect
The token endpoint can provide an ID token as defined by OpenID Connect.
$ curl 'http://localhost/oauth/token' -i -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'client_id=login&client_secret=loginsecret&grant_type=authorization_code&code=UyE6wy9igT&token_format=opaque&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf'
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: localhost
client_id=login&client_secret=loginsecret&grant_type=authorization_code&code=UyE6wy9igT&token_format=opaque&redirect_uri=http%3A%2F%2Flocalhost%2Fredirect%2Fcf
HTTP/1.1 200 OK
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json;charset=UTF-8
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1088
{
"access_token" : "e3f98d4c3997464197159926e042c367",
"token_type" : "bearer",
"id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiJhNDNmODE0Zi1lMGQ1LTQ5NzAtOTBmMC1kZTRlYzVhNmE3MTEiLCJhdWQiOlsibG9naW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsImV4cCI6MTU5NDIxNDU5MSwiaWF0IjoxNTk0MTcxMzkxLCJhenAiOiJsb2dpbiIsInNjb3BlIjpbIm9wZW5pZCJdLCJlbWFpbCI6IjI5SThNeUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6ImUzZjk4ZDRjMzk5NzQ2NDE5NzE1OTkyNmUwNDJjMzY3IiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImxvZ2luIiwiY2lkIjoibG9naW4iLCJncmFudF90eXBlIjoiYXV0aG9yaXphdGlvbl9jb2RlIiwidXNlcl9uYW1lIjoiMjlJOE15QHRlc3Qub3JnIiwicmV2X3NpZyI6IjU0YzEwNWJkIiwidXNlcl9pZCI6ImE0M2Y4MTRmLWUwZDUtNDk3MC05MGYwLWRlNGVjNWE2YTcxMSIsImF1dGhfdGltZSI6MTU5NDE3MTM5MX0.nJtpyj5utPO_kZxEiSmayZYOf0llrvY19yRvw0JSpLo",
"refresh_token" : "78eb1244632647079acc583710e1228a-r",
"expires_in" : 43199,
"scope" : "openid oauth.approvals",
"jti" : "e3f98d4c3997464197159926e042c367"
}
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
client_id | String | Optional | A unique string representing the registration information provided by the client, the recipient of the token. Optional if it is passed as part of the Basic Authorization header. |
redirect_uri | String | Required if provided on authorization request | redirection URI to which the authorization server will send the user-agent back once access is granted (or denied) |
code | String | Required | the authorization code, obtained from /oauth/authorize , issued for the user |
grant_type | String | Required | the type of authentication being used to obtain the token, in this case authorization_code |
client_secret | String | Optional | The secret passphrase configured for the OAuth client. Optional if it is passed as part of the Basic Authorization header. |
token_format | String | Optional | Can be set to opaque to retrieve an opaque and revocable token or to jwt to retrieve a JWT token. If not set the zone setting config.tokenPolicy.jwtRevocable is used. |
Response Fields
Path | Type | Description |
---|---|---|
access_token |
String |
An OAuth2 access token. When token_format=opaque is requested this value will be a random string that can only be validated using the UAA's /check_token or /introspect endpoints. When token_format=jwt is requested, this token will be a JSON Web Token suitable for offline validation by OAuth2 Resource Servers. |
id_token |
String |
An OpenID Connect ID token. This portion of the token response is only returned when clients are configured with the scope openid , the response_type includes id_token , and the user has granted approval to the client for the openid scope. |
token_type |
String |
The type of the access token issued. This field is mandated in RFC 6749. In the UAA, the only supported token_type is bearer . |
expires_in |
Number |
The number of seconds until the access token expires. |
scope |
String |
A space-delimited list of scopes authorized by the user for this client. This list is the intersection of the scopes configured on the client, the group memberships of the user, and the user's approvals (when autoapprove: true is not configured on the client). |
refresh_token |
String |
An OAuth2 refresh token. Clients typically use the refresh token to obtain a new access token without the need for the user to authenticate again. They do this by calling /oauth/token with grant_type=refresh_token . See here for more information. A refresh token will only be issued to clients that have refresh_token in their list of authorized_grant_types . |
jti |
String |
A globally unique identifier for this access token. This identifier is used when revoking tokens. |
Revoke tokens
Revoke all tokens for a user
$ curl 'http://localhost/oauth/token/revoke/user/ddd0b7a1-ceb4-4501-ba3a-2713b45f8adb' -i -X GET \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiI2Mzg2YjczOWIyNzE0NzVhODYwYTVhZTA5NTZjZmRlZCIsInN1YiI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwic2NvcGUiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwiY2xpZW50X2lkIjoiYWRtaW4iLCJjaWQiOiJhZG1pbiIsImF6cCI6ImFkbWluIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiI2NTFhN2JmMSIsImlhdCI6MTU5NDE3MTM5NywiZXhwIjoxNTk0MjE0NTk3LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInNjaW0iLCJjbGllbnRzIiwidWFhIiwiYWRtaW4iXX0.h7jvAWvJTGKyWWHvoW4V7djg-ATKhG15OECELwaq3zQ'
GET /oauth/token/revoke/user/ddd0b7a1-ceb4-4501-ba3a-2713b45f8adb HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiI2Mzg2YjczOWIyNzE0NzVhODYwYTVhZTA5NTZjZmRlZCIsInN1YiI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwic2NvcGUiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwiY2xpZW50X2lkIjoiYWRtaW4iLCJjaWQiOiJhZG1pbiIsImF6cCI6ImFkbWluIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiI2NTFhN2JmMSIsImlhdCI6MTU5NDE3MTM5NywiZXhwIjoxNTk0MjE0NTk3LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInNjaW0iLCJjbGllbnRzIiwidWFhIiwiYWRtaW4iXX0.h7jvAWvJTGKyWWHvoW4V7djg-ATKhG15OECELwaq3zQ
Host: localhost
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Path Parameters
/oauth/token/revoke/user/{userId}
Parameter | Description |
---|---|
userId | The id of the user |
Request Header
Name | Description |
---|---|
Authorization |
Bearer token with one of: uaa.admin scope OR tokens.revoke scope OR matching user_id |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Revoke all tokens for a client
$ curl 'http://localhost/oauth/token/revoke/client/piE6Ii' -i -X GET \
-H 'Authorization: Bearer dc1733fd02d9462bbc502fa01c26ba2a'
GET /oauth/token/revoke/client/piE6Ii HTTP/1.1
Authorization: Bearer dc1733fd02d9462bbc502fa01c26ba2a
Host: localhost
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Path Parameters
/oauth/token/revoke/client/{clientId}
Parameter | Description |
---|---|
clientId | The id of the client |
Request Header
Name | Description |
---|---|
Authorization |
Bearer token with uaa.admin or tokens.revoke scope. |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Revoke all tokens for a user and client combination
$ curl 'http://localhost/oauth/token/revoke/user/934a4cd7-1537-429d-aff8-26c09b6e5a40/client/cXkNJa' -i -X GET \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiIyZDZmODU2NDVkYjY0MjZmYjQxNDNmZTZkYzEzOTMzZiIsInN1YiI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwic2NvcGUiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwiY2xpZW50X2lkIjoiYWRtaW4iLCJjaWQiOiJhZG1pbiIsImF6cCI6ImFkbWluIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiI2NTFhN2JmMSIsImlhdCI6MTU5NDE3MTM5MCwiZXhwIjoxNTk0MjE0NTkwLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInNjaW0iLCJjbGllbnRzIiwidWFhIiwiYWRtaW4iXX0.HSdz65qjhI-7IhBjvTefIxGlAkfSdrbsX2iUd0FJVWU'
GET /oauth/token/revoke/user/934a4cd7-1537-429d-aff8-26c09b6e5a40/client/cXkNJa HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJqdGkiOiIyZDZmODU2NDVkYjY0MjZmYjQxNDNmZTZkYzEzOTMzZiIsInN1YiI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwic2NvcGUiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwiY2xpZW50X2lkIjoiYWRtaW4iLCJjaWQiOiJhZG1pbiIsImF6cCI6ImFkbWluIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiI2NTFhN2JmMSIsImlhdCI6MTU5NDE3MTM5MCwiZXhwIjoxNTk0MjE0NTkwLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInNjaW0iLCJjbGllbnRzIiwidWFhIiwiYWRtaW4iXX0.HSdz65qjhI-7IhBjvTefIxGlAkfSdrbsX2iUd0FJVWU
Host: localhost
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Path Parameters
/oauth/token/revoke/user/{userId}/client/{clientId}
Parameter | Description |
---|---|
userId | The id of the user |
clientId | The id of the client |
Request Header
Name | Description |
---|---|
Authorization |
Bearer token with one of: uaa.admin scope OR tokens.revoke scope OR (matching user_id AND client_id ) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Revoke a single token
$ curl 'http://localhost/oauth/token/revoke/5e6c1a9b969a487cadbfb117050d8f86' -i -X DELETE \
-H 'Authorization: Bearer 5e6c1a9b969a487cadbfb117050d8f86'
DELETE /oauth/token/revoke/5e6c1a9b969a487cadbfb117050d8f86 HTTP/1.1
Authorization: Bearer 5e6c1a9b969a487cadbfb117050d8f86
Host: localhost
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Path Parameters
/oauth/token/revoke/{tokenId}
Parameter | Description |
---|---|
tokenId | The identifier for the token to be revoked. For opaque tokens, use the token itself. For JWT tokens use the jti claim in the token. |
Request Header
Name | Description |
---|---|
Authorization |
Bearer token with one of: uaa.admin scope OR tokens.revoke scope OR the token ID to be revoked |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
List tokens
List all tokens for a user
The /oauth/token/list/user/{userId}
will return all the tokens that match the user_id in the path parameter.
This token requires the tokens.list
scope.
$ curl 'http://localhost/oauth/token/list/user/472166cf-1227-4900-b9e3-018b3b60341a' -i -X GET \
-H 'Authorization: Bearer aed06ca8acbd4ce19711dc3ae85ee926' \
-H 'Accept: application/json'
GET /oauth/token/list/user/472166cf-1227-4900-b9e3-018b3b60341a HTTP/1.1
Authorization: Bearer aed06ca8acbd4ce19711dc3ae85ee926
Accept: application/json
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 631
[ {
"tokenId" : "6b5ad715151544f8a16f813f77b18632",
"clientId" : "LdmxS8",
"userId" : "472166cf-1227-4900-b9e3-018b3b60341a",
"format" : "opaque",
"responseType" : "ACCESS_TOKEN",
"issuedAt" : 1594171397709,
"expiresAt" : 1594214597706,
"scope" : "[openid]",
"value" : null,
"zoneId" : "uaa"
}, {
"tokenId" : "2bfdd78f8111435592eadee7b05e3198-r",
"clientId" : "LdmxS8",
"userId" : "472166cf-1227-4900-b9e3-018b3b60341a",
"format" : "opaque",
"responseType" : "REFRESH_TOKEN",
"issuedAt" : 1594171397709,
"expiresAt" : 1596763397704,
"scope" : "[openid]",
"value" : null,
"zoneId" : "uaa"
} ]
Request Header
Name | Description |
---|---|
Authorization |
Bearer token containing the tokens.list scope. |
Accept |
Set to application/json |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Path Parameters
/oauth/token/list/user/{userId}
Parameter | Description |
---|---|
userId | The user ID to retrieve tokens for |
Response Fields
Path | Type | Description |
---|---|---|
[].zoneId |
String |
The zone ID for the token |
[].tokenId |
String |
The unique ID for the token |
[].clientId |
String |
Client ID for this token, will always match the client_id claim in the access token used for this call |
[].userId |
String |
User ID for this token, will always match the user_id claim in the access token used for this call |
[].format |
String |
What format was requested, possible values OPAQUE or JWT |
[].expiresAt |
Number |
Token expiration date, as a epoch timestamp, in milliseconds between the expires time and midnight, January 1, 1970 UTC. |
[].issuedAt |
Number |
Token issue date as, a epoch timestamp, in milliseconds between the issued time and midnight, January 1, 1970 UTC. |
[].scope |
String |
Comma separated list of scopes this token holds, up to 1000 characters |
[].responseType |
String |
Response type requested during the token request, possible values ACCESS_TOKEN or REFRESH_TOKEN |
[].value |
String |
Access token value will always be null |
List all tokens for a client
The /oauth/token/list/client/{clientId}
will return all the tokens that match the client_id in the path parameter.
This token requires the tokens.list
scope.
$ curl 'http://localhost/oauth/token/list/client/wiUsMO' -i -X GET \
-H 'Authorization: Bearer 2724175d0841456e831deef69ea4a270' \
-H 'Accept: application/json'
GET /oauth/token/list/client/wiUsMO HTTP/1.1
Authorization: Bearer 2724175d0841456e831deef69ea4a270
Accept: application/json
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 286
[ {
"tokenId" : "2724175d0841456e831deef69ea4a270",
"clientId" : "wiUsMO",
"userId" : null,
"format" : "opaque",
"responseType" : "ACCESS_TOKEN",
"issuedAt" : 1594171397326,
"expiresAt" : 1594214597323,
"scope" : "[tokens.list]",
"value" : null,
"zoneId" : "uaa"
} ]
Request Header
Name | Description |
---|---|
Authorization |
Bearer token containing the tokens.list scope. |
Accept |
Set to application/json |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Path Parameters
/oauth/token/list/client/{clientId}
Parameter | Description |
---|---|
clientId | The client ID to retrieve tokens for |
Response Fields
Path | Type | Description |
---|---|---|
[].zoneId |
String |
The zone ID for the token |
[].tokenId |
String |
The unique ID for the token |
[].clientId |
String |
Client ID for this token, will always match the client_id claim in the access token used for this call |
[].userId |
String |
User ID for this token, will always match the user_id claim in the access token used for this call |
[].format |
String |
What format was requested, possible values OPAQUE or JWT |
[].expiresAt |
Number |
Token expiration date, as a epoch timestamp, in milliseconds between the expires time and midnight, January 1, 1970 UTC. |
[].issuedAt |
Number |
Token issue date as, a epoch timestamp, in milliseconds between the issued time and midnight, January 1, 1970 UTC. |
[].scope |
String |
Comma separated list of scopes this token holds, up to 1000 characters |
[].responseType |
String |
Response type requested during the token request, possible values ACCESS_TOKEN or REFRESH_TOKEN |
[].value |
String |
Access token value will always be null |
Introspect Token
Introspect token endpoint is RFC-7662 compliant. Active flag is responsible for showing the validity of the token and not the HTTP status code. Status code will be 200 OK for both valid and invalid tokens.
$ curl 'http://localhost/introspect' -i -X POST \
-H 'Authorization: bearer ba58894f1f3d4012b3893c586684ea93' \
-d 'token=de21ab6a87ea487781bd61e85098be08'
POST /introspect HTTP/1.1
Authorization: bearer ba58894f1f3d4012b3893c586684ea93
Host: localhost
Content-Type: application/x-www-form-urlencoded
token=de21ab6a87ea487781bd61e85098be08
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 706
{
"user_id" : "b1bc64ae-c4d3-4eb5-afab-85acfb3cb60d",
"user_name" : "marissa",
"email" : "[email protected]",
"client_id" : "app",
"exp" : 1594214573,
"scope" : [ "scim.userids", "openid", "cloud_controller.read", "password.write", "cloud_controller.write" ],
"jti" : "de21ab6a87ea487781bd61e85098be08",
"aud" : [ "app", "scim", "cloud_controller", "password", "openid" ],
"sub" : "b1bc64ae-c4d3-4eb5-afab-85acfb3cb60d",
"iss" : "http://localhost:8080/uaa/oauth/token",
"iat" : 1594171373,
"cid" : "app",
"grant_type" : "password",
"azp" : "app",
"auth_time" : 1594171373,
"zid" : "uaa",
"rev_sig" : "594c8ccf",
"origin" : "uaa",
"revocable" : true,
"active" : true
}
Request Headers
Name | Description |
---|---|
Authorization |
One of the following authentication/authorization mechanisms:
|
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
token | String | Required | The token |
Response Fields
Path | Type | Description |
---|---|---|
active |
Boolean |
Indicates whether or not the presented token is currently valid (given token has been issued by this authorization server, has not been revoked by the resource owner, and is within its given time window of validity) |
user_id |
String |
Only applicable for user tokens |
user_name |
String |
Only applicable for user tokens |
email |
String |
Only applicable for user tokens |
client_id |
String |
A unique string representing the registration information provided by the client |
exp |
Number |
Expiration Time Claim |
authorities |
Array |
Only applicable for client tokens |
scope |
Array |
List of scopes authorized by the user for this client |
jti |
String |
JWT ID Claim |
aud |
Array |
Audience Claim |
sub |
String |
Subject Claim |
iss |
String |
Issuer Claim |
iat |
Number |
Issued At Claim |
cid |
String |
See client_id |
grant_type |
String |
The type of authentication being used to obtain the token, in this case password |
azp |
String |
Authorized party |
auth_time |
Number |
Only applicable for user tokens |
zid |
String |
Zone ID |
rev_sig |
String |
Revocation Signature - token revocation hash salted with at least client ID and client secret, and optionally various user values. |
origin |
String |
Only applicable for user tokens |
revocable |
Boolean |
Set to true if this token is revocable |
Check Token
$ curl 'http://localhost/check_token' -i -u 'app:appclientsecret' -X POST \
-d 'token=99f5d848345b4d738f05775d5b20dc22&scopes=password.write%2Cscim.userids'
POST /check_token HTTP/1.1
Authorization: Basic YXBwOmFwcGNsaWVudHNlY3JldA==
Host: localhost
Content-Type: application/x-www-form-urlencoded
token=99f5d848345b4d738f05775d5b20dc22&scopes=password.write%2Cscim.userids
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 687
{
"user_id" : "67cd1d7f-314b-4427-a10d-70c15c8e8c6b",
"user_name" : "marissa",
"email" : "[email protected]",
"client_id" : "app",
"exp" : 1594214578,
"scope" : [ "scim.userids", "openid", "cloud_controller.read", "password.write", "cloud_controller.write" ],
"jti" : "99f5d848345b4d738f05775d5b20dc22",
"aud" : [ "app", "scim", "cloud_controller", "password", "openid" ],
"sub" : "67cd1d7f-314b-4427-a10d-70c15c8e8c6b",
"iss" : "http://localhost:8080/uaa/oauth/token",
"iat" : 1594171378,
"cid" : "app",
"grant_type" : "password",
"azp" : "app",
"auth_time" : 1594171378,
"zid" : "uaa",
"rev_sig" : "bb3489fd",
"origin" : "uaa",
"revocable" : true
}
Request Headers
Name | Description |
---|---|
Authorization |
Uses basic authorization with base64(resource_server:shared_secret) assuming the caller (a resource server) is actually also a registered client and has uaa.resource authority |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
token | String | Required | The token |
scopes | Array | Optional | String of comma-separated scopes, for checking presence of scopes on the token |
Response Fields
Path | Type | Description |
---|---|---|
user_id |
String |
Only applicable for user tokens |
user_name |
String |
Only applicable for user tokens |
email |
String |
Only applicable for user tokens |
client_id |
String |
A unique string representing the registration information provided by the client |
exp |
Number |
Expiration Time Claim |
authorities |
Array |
Only applicable for client tokens |
scope |
Array |
List of scopes authorized by the user for this client |
jti |
String |
JWT ID Claim |
aud |
Array |
Audience Claim |
sub |
String |
Subject Claim |
iss |
String |
Issuer Claim |
iat |
Number |
Issued At Claim |
cid |
String |
See client_id |
grant_type |
String |
The type of authentication being used to obtain the token, in this case password |
azp |
String |
Authorized party |
auth_time |
Number |
Only applicable for user tokens |
zid |
String |
Zone ID |
rev_sig |
String |
Revocation Signature - token revocation hash salted with at least client ID and client secret, and optionally various user values. |
origin |
String |
Only applicable for user tokens |
revocable |
Boolean |
Set to true if this token is revocable |
Token Key(s)
Token Key
An endpoint which returns the JSON Web Token (JWT) key, used by the UAA to sign JWT access tokens, and to be used by authorized clients to verify that a token came from the UAA. The key is in JSON Web Key format. For complete information about JSON Web Keys, see RFC 7517. In the case when the token key is symmetric, signer key and verifier key are the same, then this call is authenticated with client credentials using the HTTP Basic method.
JWT signing keys are specified via the identity zone configuration (see /identity-zones). An identity zone token policy can be configured with multiple keys for purposes of key rotation. When adding a new key, set its ID as the activeKeyId
to use it to sign all new tokens. /introspect will continue to verify tokens signed with the previous signing key for as long as it is present in the keys
of the identity zone's token policy. Remove it to invalidate all those tokens.
Asymmetric
$ curl 'http://localhost/token_key' -i -X GET \
-H 'Accept: application/json' \
-H 'If-None-Match: 1501570800000'
GET /token_key HTTP/1.1
Accept: application/json
If-None-Match: 1501570800000
Host: localhost
HTTP/1.1 200 OK
ETag: "1594171379737"
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 921
{
"kty" : "RSA",
"e" : "AQAB",
"use" : "sig",
"kid" : "testKey",
"alg" : "RS256",
"value" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0m59l2u9iDnMbrXHfqkO\nrn2dVQ3vfBJqcDuFUK03d+1PZGbVlNCqnkpIJ8syFppW8ljnWweP7+LiWpRoz0I7\nfYb3d8TjhV86Y997Fl4DBrxgM6KTJOuE/uxnoDhZQ14LgOU2ckXjOzOdTsnGMKQB\nLCl0vpcXBtFLMaSbpv1ozi8h7DJyVZ6EnFQZUWGdgTMhDrmqevfx95U/16c5WBDO\nkqwIn7Glry9n9Suxygbf8g5AzpWcusZgDLIIZ7JTUldBb8qU2a0Dl4mvLZOn4wPo\njfj9Cw2QICsc5+Pwf21fP+hzf+1WSRHbnYv8uanRO0gZ8ekGaghM/2H6gqJbo2nI\nJwIDAQAB\n-----END PUBLIC KEY-----",
"n" : "ANJufZdrvYg5zG61x36pDq59nVUN73wSanA7hVCtN3ftT2Rm1ZTQqp5KSCfLMhaaVvJY51sHj-_i4lqUaM9CO32G93fE44VfOmPfexZeAwa8YDOikyTrhP7sZ6A4WUNeC4DlNnJF4zsznU7JxjCkASwpdL6XFwbRSzGkm6b9aM4vIewyclWehJxUGVFhnYEzIQ65qnr38feVP9enOVgQzpKsCJ-xpa8vZ_UrscoG3_IOQM6VnLrGYAyyCGeyU1JXQW_KlNmtA5eJry2Tp-MD6I34_QsNkCArHOfj8H9tXz_oc3_tVkkR252L_Lmp0TtIGfHpBmoITP9h-oKiW6NpyCc"
}
Request Headers
Name | Description |
---|---|
If-None-Match |
Optional. See Ref: RFC 2616 |
Response Headers
Name | Description |
---|---|
ETag |
The ETag version of the resource - used to decide if the client's version of the resource is already up to date. The UAA will set the ETag value to the epoch time in milliseconds of the last zone configuration change. |
Response Fields
Path | Type | Description |
---|---|---|
kid |
String |
Key ID of key to be used for verification of the token. |
alg |
String |
Encryption algorithm |
value |
String |
Verifier key |
kty |
String |
Key type (RSA) |
use |
String |
Public key use parameter - identifies intended use of the public key. (defaults to "sig") |
n |
String |
RSA key modulus |
e |
String |
RSA key public exponent |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Unregistered client or incorrect client secret |
Symmetric
$ curl 'http://localhost/token_key' -i -u 'app:appclientsecret' -X GET \
-H 'Accept: application/json' \
-H 'If-None-Match: 1501570800000'
GET /token_key HTTP/1.1
Accept: application/json
Authorization: Basic YXBwOmFwcGNsaWVudHNlY3JldA==
If-None-Match: 1501570800000
Host: localhost
HTTP/1.1 200 OK
ETag: "1594171379575"
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 95
{
"kty" : "MAC",
"alg" : "HS256",
"value" : "key",
"use" : "sig",
"kid" : "testKey"
}
Request Headers
Name | Description |
---|---|
Authorization |
Uses basic authorization with base64(resource_server:shared_secret) assuming the caller (a resource server) is actually also a registered client and has uaa.resource authority |
If-None-Match |
Optional. See Ref: RFC 2616 |
Response Fields
Path | Type | Description |
---|---|---|
kid |
String |
Key ID of key to be used for verification of the token. |
alg |
String |
Encryption algorithm |
value |
String |
Verifier key |
kty |
String |
Key type (MAC) |
use |
String |
Public key use parameter - identifies intended use of the public key. (defaults to "sig") |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Unregistered client or incorrect client secret |
403 | Forbidden - Not a resource server (missing uaa.resource scope) |
Token Keys
An endpoint which returns the list of JWT keys. To support key rotation, this list specifies the IDs of all currently valid keys. JWT tokens issued by the UAA contain a kid
field, indicating which key should be used for verification of the token.
$ curl 'http://localhost/token_keys' -i -u 'app:appclientsecret' -X GET \
-H 'Accept: application/json' \
-H 'If-None-Match: 1501570800000'
GET /token_keys HTTP/1.1
Accept: application/json
Authorization: Basic YXBwOmFwcGNsaWVudHNlY3JldA==
If-None-Match: 1501570800000
Host: localhost
HTTP/1.1 200 OK
ETag: "1594171379367"
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 956
{
"keys" : [ {
"kty" : "RSA",
"e" : "AQAB",
"use" : "sig",
"kid" : "testKey",
"alg" : "RS256",
"value" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0m59l2u9iDnMbrXHfqkO\nrn2dVQ3vfBJqcDuFUK03d+1PZGbVlNCqnkpIJ8syFppW8ljnWweP7+LiWpRoz0I7\nfYb3d8TjhV86Y997Fl4DBrxgM6KTJOuE/uxnoDhZQ14LgOU2ckXjOzOdTsnGMKQB\nLCl0vpcXBtFLMaSbpv1ozi8h7DJyVZ6EnFQZUWGdgTMhDrmqevfx95U/16c5WBDO\nkqwIn7Glry9n9Suxygbf8g5AzpWcusZgDLIIZ7JTUldBb8qU2a0Dl4mvLZOn4wPo\njfj9Cw2QICsc5+Pwf21fP+hzf+1WSRHbnYv8uanRO0gZ8ekGaghM/2H6gqJbo2nI\nJwIDAQAB\n-----END PUBLIC KEY-----",
"n" : "ANJufZdrvYg5zG61x36pDq59nVUN73wSanA7hVCtN3ftT2Rm1ZTQqp5KSCfLMhaaVvJY51sHj-_i4lqUaM9CO32G93fE44VfOmPfexZeAwa8YDOikyTrhP7sZ6A4WUNeC4DlNnJF4zsznU7JxjCkASwpdL6XFwbRSzGkm6b9aM4vIewyclWehJxUGVFhnYEzIQ65qnr38feVP9enOVgQzpKsCJ-xpa8vZ_UrscoG3_IOQM6VnLrGYAyyCGeyU1JXQW_KlNmtA5eJry2Tp-MD6I34_QsNkCArHOfj8H9tXz_oc3_tVkkR252L_Lmp0TtIGfHpBmoITP9h-oKiW6NpyCc"
} ]
}
Request Headers
Name | Description |
---|---|
Authorization |
No authorization is required for requesting public keys. |
If-None-Match |
Optional. See Ref: RFC 2616 |
Response Headers
Name | Description |
---|---|
ETag |
The ETag version of the resource - used to decide if the client's version of the resource is already up to date. The UAA will set the ETag value to the epoch time in milliseconds of the last zone configuration change. |
Response Fields
Path | Type | Description |
---|---|---|
keys.[].kid |
String |
Key ID of key to be used for verification of the token. |
keys.[].alg |
String |
Encryption algorithm |
keys.[].value |
String |
Verifier key |
keys.[].kty |
String |
Key type (RSA or MAC) |
keys.[].use |
String |
Public key use parameter - identifies intended use of the public key. (defaults to "sig") |
keys.[].n |
String |
RSA key modulus |
keys.[].e |
String |
RSA key public exponent |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Unregistered client or incorrect client secret |
Session Management
Logout.do
The logout endpoint is meant to be used by applications to log the user out of the UAA session. UAA will only log a user out of the UAA session if they also hit this endpoint, and may also perform Single Logout with SAML providers if configured to do so. The recommendation for application authors is to:
- provide a local logout feature specific to the client application and use that to clear state in the client
- as part of the logout redirect to the logout endpoint using their client ID
- provide a redirect param in the link to the logout success page of their application so that the user come back to a familiar place when logged out
- add the logout success page to the client's redirect_uri configuration to whitelist the URL
If the chosen redirect URI is not whitelisted, users will land on the UAA login page. This is a security feature intended to prevent open redirects as per RFC 6749.
$ curl 'http://localhost/logout.do?redirect=http%3A%2F%2Fredirect.localhost&client_id=some_client_that_contains_redirect_uri_matching_request_param' -i -X GET
GET /logout.do?redirect=http%3A%2F%2Fredirect.localhost&client_id=some_client_that_contains_redirect_uri_matching_request_param HTTP/1.1
Host: localhost
HTTP/1.1 302 Found
Strict-Transport-Security: max-age=31536000
Set-Cookie: X-Uaa-Csrf=cpT1pOjCpDJh70OjQyT4Ae; Path=/; Max-Age=86400; Expires=Thu, 09 Jul 2020 01:23:08 GMT; HttpOnly
Set-Cookie: Current-User=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: X-Uaa-Csrf=fYai6IGj85SmZeFGBBYW22; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly
Set-Cookie: JSESSIONID=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Location: http://redirect.localhost
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
redirect | String | Optional (defaults to Identity Zone redirect uri ) |
On a successful logout redirect the user to here, provided the URL is whitelisted |
client_id | String | Optional | On a successful logout the client's redirect_uri configuration is used as the redirect uri whitelist. If this value is not provided, the identity zone whitelist will be used instead. |
Response Headers
Name | Description |
---|---|
Location |
Redirect URI |
Identity Zones
The UAA supports multi tenancy. This is referred to as identity zones. An identity zone is accessed through a unique subdomain. If the standard UAA responds to https://uaa.10.244.0.34.xip.io a zone on this UAA would be accessed through https://testzone1.uaa.10.244.0.34.xip.io
A zone contains a unique identifier as well as a unique subdomain:
{
"id":"testzone1",
"subdomain":"testzone1",
"name":"The Twiglet Zone[testzone1]",
"version":0,
"description":"Like the Twilight Zone but tastier[testzone1].",
"created":1426258488910,
"last_modified":1426258488910
}
The UAA by default creates a default zone. This zone will always be present, the ID will always be
uaa
, and the subdomain is blank:
{
"id": "uaa",
"subdomain": "",
"name": "uaa",
"version": 0,
"description": "The system zone for backwards compatibility",
"created": 946710000000,
"last_modified": 946710000000
}
Creating an identity zone
An identity zone is created using a POST
with an IdentityZone
object. If the object contains an id, this id will be used as the identifier, otherwise an identifier will be generated. Once a zone has been created, the UAA will start accepting requests on the subdomain defined in the subdomain
field of the identity zone.
When an Identity Zone is created, an internal Identity Provider is automatically created with the default password policy.
$ curl 'http://localhost/identity-zones' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 6d884356281943d78329ab4a013db03b' \
-d '{
"id" : "twiglet-create",
"subdomain" : "twiglet-create",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1",
"keys" : {
"active-key-1" : {
"signingKey" : "key"
}
}
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"key" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"passphrase" : "password",
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n",
"privateKey" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"privateKeyPassword" : "password"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa",
"defaultIdentityProvider" : "uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"description" : "Like the Twilight Zone but tastier.",
"created" : 1594171382884,
"active" : true,
"last_modified" : 1594171382884
}'
POST /identity-zones HTTP/1.1
Content-Type: application/json
Authorization: Bearer 6d884356281943d78329ab4a013db03b
Content-Length: 6508
Host: localhost
{
"id" : "twiglet-create",
"subdomain" : "twiglet-create",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1",
"keys" : {
"active-key-1" : {
"signingKey" : "key"
}
}
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"key" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"passphrase" : "password",
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n",
"privateKey" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"privateKeyPassword" : "password"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa",
"defaultIdentityProvider" : "uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"description" : "Like the Twilight Zone but tastier.",
"created" : 1594171382884,
"active" : true,
"last_modified" : 1594171382884
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 5277
{
"id" : "twiglet-create",
"subdomain" : "twiglet-create",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa",
"defaultIdentityProvider" : "uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"description" : "Like the Twilight Zone but tastier.",
"created" : 1594171382897,
"active" : true,
"last_modified" : 1594171382897
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.write or uaa.admin |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
id | String | Optional | Unique ID of the identity zone |
subdomain | String | Required | Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name | String | Required | Human-readable zone name |
description | String | Optional | Description of the zone |
version | Number | Optional | Reserved for future use of E-Tag versioning |
active | Boolean | Optional | Indicates whether the identity zone is active. Defaults to true. |
config.clientSecretPolicy.minLength | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength | Number | Required when clientSecretPolicy in the config is not null |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.tokenPolicy | Object | Optional | Various fields pertaining to the JWT access and refresh tokens. |
config.tokenPolicy.activeKeyId | String | Required if config.tokenPolicy.keys are set |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.keys.. | String | Optional | Keys which will be used to sign the token |
config.tokenPolicy.accessTokenValidity | Number | Optional | Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity | Number | Optional | Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable | Boolean | Optional | Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique | Boolean | Optional | If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat | String | Optional | The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.samlConfig.disableInResponseToCheck | Boolean | Optional | If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned | Boolean | Optional | If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned | Boolean | Optional | Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned | Boolean | Optional | Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned | Boolean | Optional | If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds | Number | Optional | The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID | String | Optional | Unique ID of the SAML2 entity |
config.samlConfig.certificate | String | Deprecated | Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.privateKey | String | Deprecated | Exposed SAML metadata property. The SAML provider's private key. |
config.samlConfig.privateKeyPassword | String | Deprecated | Exposed SAML metadata property. The SAML provider's private key password. Reserved for future use. |
config.samlConfig.activeKeyId | String | Required if a list of keys defined in keys map |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.key | String | Optional. Can only be used in conjunction with keys.<key-id>.passphrase and keys.<key-id>.certificate |
Exposed SAML metadata property. The SAML provider's private key. |
config.samlConfig.keys.*.passphrase | String | Optional. Can only be used in conjunction with keys.<key-id>.key and keys.<key-id>.certificate |
Exposed SAML metadata property. The SAML provider's private key password. Reserved for future use. |
config.samlConfig.keys.*.certificate | String | Optional. Can only be used in conjunction with keys.<key-id>.key and keys.<key-id>.passphrase |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.entityID | String | Optional | Unique ID of the SAML2 entity |
config.links.logout.redirectUrl | String | Optional | Logout redirect url |
config.links.homeRedirect | String | Optional | Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName | String | Optional | Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter | Boolean | Optional | Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist | Array | Optional | List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled | Boolean | Optional | Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup | Null | Optional | Where users are directed upon clicking the account creation link |
config.links.selfService.passwd | Null | Optional | Where users are directed upon clicking the password reset link |
config.prompts[] | Array | Optional | List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name | String | Optional | Name of field |
config.prompts[].type | String | Optional | What kind of field this is (e.g. text or password) |
config.prompts[].text | String | Optional | Actual text displayed on prompt for field |
config.idpDiscoveryEnabled | Boolean | Optional | IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled | Boolean | Optional | This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer | String | Optional | Issuer of this zone. Must be a valid URL. |
config.defaultIdentityProvider | String | Optional | This value can be set to the origin key of an identity provider. If set, the user will be directed to this identity provider automatically if no other identity provider is discovered or selected via login_hint. |
config.branding.companyName | String | Optional | This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo | String | Optional | This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo | String | Optional | This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText | String | Optional | This text appears on the footer of all UAA pages |
config.branding.footerLinks.* | String | Optional | These links (Map |
config.branding.banner.text | String | Optional | This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo | String | Optional | This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link | String | Optional | The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor | String | Optional | Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor | String | Optional | Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text | String | Optional. Must be set if configuring consent. | If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link | String | Optional. Can be null if configuring consent. | If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.xhrConfiguration.allowedOrigins | Array | Optional | Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns | Array | Optional | Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris | Array | Optional | The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns | Array | Optional | The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders | Array | Optional | Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods | Array | Optional | Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials | Boolean | Optional | Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge | Number | Optional | Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.defaultConfiguration.allowedOrigins | Array | Optional | Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns | Array | Optional | Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris | Array | Optional | The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns | Array | Optional | The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders | Array | Optional | Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods | Array | Optional | Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials | Boolean | Optional | Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge | Number | Optional | Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups | Array | Optional | Default groups each user in the zone inherits. |
config.mfaConfig.enabled | Boolean | Optional | Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName | String | Required when config.mfaConfig.enabled is true |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders | Array | Optional | Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Response Fields
Path | Type | Description |
---|---|---|
id |
String |
Unique ID of the identity zone |
subdomain |
String |
Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name |
String |
Human-readable zone name |
description |
String |
Description of the zone |
version |
Number |
Reserved for future use of E-Tag versioning |
active |
Boolean |
Indicates whether the identity zone is active. Defaults to true. |
config.tokenPolicy.activeKeyId |
String |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.accessTokenValidity |
Number |
Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity |
Number |
Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable |
Boolean |
Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique |
Boolean |
If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat |
String |
The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.clientSecretPolicy.minLength |
Number |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength |
Number |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter |
Number |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter |
Number |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit |
Number |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter |
Number |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.samlConfig.disableInResponseToCheck |
Boolean |
If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned |
Boolean |
If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned |
Boolean |
Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned |
Boolean |
Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned |
Boolean |
If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds |
Number |
The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID |
String |
Unique ID of the SAML2 entity |
config.samlConfig.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.activeKeyId |
String |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.links.logout.redirectUrl |
String |
Logout redirect url |
config.links.homeRedirect |
String |
Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName |
String |
Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter |
Boolean |
Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist |
Array |
List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled |
Boolean |
Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup |
Null |
Where users are directed upon clicking the account creation link |
config.links.selfService.passwd |
Null |
Where users are directed upon clicking the password reset link |
config.prompts[] |
Array |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name |
String |
Name of field |
config.prompts[].type |
String |
What kind of field this is (e.g. text or password) |
config.prompts[].text |
String |
Actual text displayed on prompt for field |
config.defaultIdentityProvider |
String |
This value can be set to the origin key of an identity provider. If set, the user will be directed to this identity provider automatically if no other identity provider is discovered or selected via login_hint. |
config.idpDiscoveryEnabled |
Boolean |
IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled |
Boolean |
This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer |
String |
Issuer of this zone. Must be a valid URL. |
config.branding.companyName |
String |
This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo |
String |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo |
String |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText |
String |
This text appears on the footer of all UAA pages |
config.branding.footerLinks.* |
String |
These links (Map |
config.branding.banner.text |
String |
This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo |
String |
This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link |
String |
The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor |
String |
Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor |
String |
Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text |
String |
If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link |
String |
If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.defaultConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.xhrConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups |
Array |
Default groups each user in the zone inherits. |
config.mfaConfig.enabled |
Boolean |
Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName |
String |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders |
Array |
Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Error Codes
Error Code | Description |
---|---|
400 | Bad Request |
401 | Unauthorized - Invalid token |
403 | Forbidden - Insufficient scope (Zones can only be created by being authenticated in the default zone.) |
422 | Unprocessable Entity - Invalid zone details |
Sequential example of creating a zone and creating an admin client in that zone:
uaac target http://localhost:8080/uaa
uaac token client get admin -s adminsecret
uaac client update admin --authorities "uaa.admin,clients.read,clients.write,clients.secret,scim.read,scim.write,clients.admin,zones.testzone1.admin,zones.write"
uaac token client get admin -s adminsecret
uaac -t curl -XPOST -H"Content-Type:application/json" -H"Accept:application/json" --data '{ "id":"testzone1", "subdomain":"testzone1", "name":"The Twiglet Zone[testzone1]", "version":0, "description":"Like the Twilight Zone but tastier[testzone1]."}' /identity-zones
uaac -t curl -H"X-Identity-Zone-Id:testzone1" -XPOST -H"Content-Type:application/json" -H"Accept:application/json" --data '{ "client_id" : "admin", "client_secret" : "adminsecret", "scope" : ["uaa.none"], "resource_ids" : ["none"], "authorities" : ["uaa.admin","clients.read","clients.write","clients.secret","scim.read","scim.write","clients.admin"], "authorized_grant_types" : ["client_credentials"]}' /oauth/clients
uaac target http://testzone1.localhost:8080/uaa
uaac token client get admin -s adminsecret
uaac token decode
Retrieving an identity zone
$ curl 'http://localhost/identity-zones/twiglet-get' -i -X GET \
-H 'Authorization: Bearer 601c7e3f1e234937a8ca93f1fda18d3d'
GET /identity-zones/twiglet-get HTTP/1.1
Authorization: Bearer 601c7e3f1e234937a8ca93f1fda18d3d
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 5175
{
"id" : "twiglet-get",
"subdomain" : "twiglet-get",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"created" : 1594171382727,
"active" : true,
"last_modified" : 1594171382727
}
Path Parameters
/identity-zones/{id}
Parameter | Description |
---|---|
id | Unique ID of the identity zone to retrieve |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.read or zones.write or uaa.admin . If you use the zone-switching header, bear token containing zones.<zone id>.admin or zones.<zone id>.read can be used. |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Response Fields
Path | Type | Description |
---|---|---|
id |
String |
Unique ID of the identity zone |
subdomain |
String |
Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name |
String |
Human-readable zone name |
description |
String |
Description of the zone |
version |
Number |
Reserved for future use of E-Tag versioning |
active |
Boolean |
Indicates whether the identity zone is active. Defaults to true. |
config.tokenPolicy.activeKeyId |
String |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.accessTokenValidity |
Number |
Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity |
Number |
Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable |
Boolean |
Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique |
Boolean |
If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat |
String |
The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.clientSecretPolicy.minLength |
Number |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength |
Number |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter |
Number |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter |
Number |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit |
Number |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter |
Number |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.samlConfig.disableInResponseToCheck |
Boolean |
If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned |
Boolean |
If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned |
Boolean |
Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned |
Boolean |
Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned |
Boolean |
If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds |
Number |
The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID |
String |
Unique ID of the SAML2 entity |
config.samlConfig.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.activeKeyId |
String |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.links.logout.redirectUrl |
String |
Logout redirect url |
config.links.homeRedirect |
String |
Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName |
String |
Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter |
Boolean |
Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist |
Array |
List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled |
Boolean |
Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup |
Null |
Where users are directed upon clicking the account creation link |
config.links.selfService.passwd |
Null |
Where users are directed upon clicking the password reset link |
config.prompts[] |
Array |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name |
String |
Name of field |
config.prompts[].type |
String |
What kind of field this is (e.g. text or password) |
config.prompts[].text |
String |
Actual text displayed on prompt for field |
config.defaultIdentityProvider |
String |
This value can be set to the origin key of an identity provider. If set, the user will be directed to this identity provider automatically if no other identity provider is discovered or selected via login_hint. |
config.idpDiscoveryEnabled |
Boolean |
IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled |
Boolean |
This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer |
String |
Issuer of this zone. Must be a valid URL. |
config.branding.companyName |
String |
This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo |
String |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo |
String |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText |
String |
This text appears on the footer of all UAA pages |
config.branding.footerLinks.* |
String |
These links (Map |
config.branding.banner.text |
String |
This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo |
String |
This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link |
String |
The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor |
String |
Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor |
String |
Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text |
String |
If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link |
String |
If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.defaultConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.xhrConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups |
Array |
Default groups each user in the zone inherits. |
config.mfaConfig.enabled |
Boolean |
Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName |
String |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders |
Array |
Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Error Codes
Error Code | Description |
---|---|
400 | Bad Request |
401 | Unauthorized - Invalid token |
403 | Forbidden - Insufficient scope |
404 | Not Found - Zone does not exist |
Retrieving all identity zones
$ curl 'http://localhost/identity-zones' -i -X GET \
-H 'Authorization: Bearer 0e4de8415383412ca171f38492e4a499'
GET /identity-zones HTTP/1.1
Authorization: Bearer 0e4de8415383412ca171f38492e4a499
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 15827
[ {
"id" : "twiglet-get-1",
"subdomain" : "twiglet-get-1",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"created" : 1594171381825,
"active" : true,
"last_modified" : 1594171381825
}, {
"id" : "twiglet-get-2",
"subdomain" : "twiglet-get-2",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"created" : 1594171381966,
"active" : true,
"last_modified" : 1594171381966
}, {
"id" : "uaa",
"subdomain" : "",
"config" : {
"clientSecretPolicy" : {
"minLength" : 0,
"maxLength" : 255,
"requireUpperCaseCharacter" : 0,
"requireLowerCaseCharacter" : 0,
"requireDigit" : 0,
"requireSpecialCharacter" : 0
},
"tokenPolicy" : {
"accessTokenValidity" : 43200,
"refreshTokenValidity" : 2592000,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : null
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO\nMAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO\nMAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h\ncnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx\nCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM\nBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb\nBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN\nADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W\nqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw\nznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha\nMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc\ngBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD\nVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD\nVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh\nQGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ\n0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC\nKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK\nRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=\n-----END CERTIFICATE-----\n"
}
},
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO\nMAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO\nMAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h\ncnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx\nCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM\nBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb\nBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN\nADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W\nqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw\nznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha\nMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc\ngBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD\nVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD\nVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh\nQGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ\n0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC\nKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK\nRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code ( Get one at http://localhost:8080/uaa/passcode )"
} ],
"idpDiscoveryEnabled" : false,
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "scim.me", "cloud_controller.read", "cloud_controller.write", "cloud_controller_service_permissions.read", "password.write", "scim.userids", "uaa.user", "approvals.me", "oauth.approvals", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
}
},
"name" : "uaa",
"version" : 1,
"description" : "The system zone for backwards compatibility",
"created" : 946684800000,
"active" : true,
"last_modified" : 1594171381418
} ]
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.read or zones.write or uaa.admin . If you use the zone-switching header, bear token containing zones.<zone id>.admin can be used. |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Response Fields
Path | Type | Description |
---|---|---|
[].id |
String |
Unique ID of the identity zone |
[].subdomain |
String |
Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
[].name |
String |
Human-readable zone name |
[].description |
String |
Description of the zone |
[].version |
Number |
Reserved for future use of E-Tag versioning |
[].active |
Boolean |
Indicates whether the identity zone is active. Defaults to true. |
[].config.tokenPolicy.activeKeyId |
Varies |
The ID for the key that is being used to sign tokens |
[].config.tokenPolicy.accessTokenValidity |
Number |
Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
[].config.tokenPolicy.refreshTokenValidity |
Number |
Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
[].config.tokenPolicy.jwtRevocable |
Boolean |
Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
[].config.tokenPolicy.refreshTokenUnique |
Boolean |
If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
[].config.tokenPolicy.refreshTokenFormat |
String |
The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
[].config.clientSecretPolicy.minLength |
Number |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
[].config.clientSecretPolicy.maxLength |
Number |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
[].config.clientSecretPolicy.requireUpperCaseCharacter |
Number |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
[].config.clientSecretPolicy.requireLowerCaseCharacter |
Number |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
[].config.clientSecretPolicy.requireDigit |
Number |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
[].config.clientSecretPolicy.requireSpecialCharacter |
Number |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
[].config.samlConfig.disableInResponseToCheck |
Boolean |
If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
[].config.samlConfig.assertionSigned |
Boolean |
If true , the SAML provider will sign all assertions |
[].config.samlConfig.wantAssertionSigned |
Boolean |
Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
[].config.samlConfig.requestSigned |
Boolean |
Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
[].config.samlConfig.wantAuthnRequestSigned |
Boolean |
If true , the authentication request from the partner service provider must be signed. |
[].config.samlConfig.assertionTimeToLiveSeconds |
Number |
The lifetime of a SAML assertion in seconds. Defaults to 600. |
[].config.samlConfig.entityID |
String |
Unique ID of the SAML2 entity |
[].config.samlConfig.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
[].config.samlConfig.activeKeyId |
String |
The ID of the key that should be used for signing metadata and assertions. |
[].config.samlConfig.keys.* |
Object |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
[].config.samlConfig.keys.*.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
[].config.links.logout.redirectUrl |
String |
Logout redirect url |
[].config.links.homeRedirect |
String |
Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
[].config.links.logout.redirectParameterName |
String |
Changes the name of the redirect parameter |
[].config.links.logout.disableRedirectParameter |
Boolean |
Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
[].config.links.logout.whitelist |
Array |
List of allowed whitelist redirects |
[].config.links.selfService.selfServiceLinksEnabled |
Boolean |
Whether or not users are allowed to sign up or reset their passwords via the UI |
[].config.links.selfService.signup |
Null |
Where users are directed upon clicking the account creation link |
[].config.links.selfService.passwd |
Null |
Where users are directed upon clicking the password reset link |
[].config.branding.companyName |
Varies |
This name is used on the UAA Pages and in account management related communication in UAA |
[].config.branding.productLogo |
Varies |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
[].config.branding.squareLogo |
Varies |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
[].config.branding.footerLegalText |
Varies |
This text appears on the footer of all UAA pages |
[].config.branding.footerLinks |
Object |
These links (Map |
[].config.branding.consent.text |
String |
If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
[].config.branding.consent.link |
String |
If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
[].config.prompts[] |
Array |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
[].config.prompts[].name |
String |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
[].config.prompts[].type |
String |
What kind of field this is (e.g. text or password) |
[].config.prompts[].text |
String |
Actual text displayed on prompt for field |
[].config.idpDiscoveryEnabled |
Boolean |
IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
[].config.accountChooserEnabled |
Boolean |
This flag is required to enable account choosing functionality for IDP discovery page. |
[].config.issuer |
String |
Issuer of this zone. Must be a valid URL. |
[].config.branding.companyName |
String |
This name is used on the UAA Pages and in account management related communication in UAA |
[].config.branding.productLogo |
String |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
[].config.branding.squareLogo |
String |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
[].config.branding.footerLegalText |
String |
This text appears on the footer of all UAA pages |
[].config.branding.footerLinks.* |
String |
These links (Map |
[].config.branding.banner.text |
String |
This is text displayed in a banner at the top of the UAA login page |
[].config.branding.banner.logo |
String |
This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
[].config.branding.banner.link |
String |
The UAA login banner will be a link pointing to this url |
[].config.branding.banner.textColor |
String |
Hexadecimal color code for banner text color, does not allow color names |
[].config.branding.banner.backgroundColor |
String |
Hexadecimal color code for banner background color, does not allow color names |
[].config.corsPolicy.xhrConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
[].config.corsPolicy.xhrConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
[].config.corsPolicy.xhrConfiguration.allowedUris |
Array |
The list of allowed URIs. |
[].config.corsPolicy.xhrConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
[].config.corsPolicy.xhrConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
[].config.corsPolicy.xhrConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
[].config.corsPolicy.xhrConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
[].config.corsPolicy.xhrConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
[].config.corsPolicy.defaultConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
[].config.corsPolicy.defaultConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
[].config.corsPolicy.defaultConfiguration.allowedUris |
Array |
The list of allowed URIs. |
[].config.corsPolicy.defaultConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
[].config.corsPolicy.defaultConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
[].config.corsPolicy.defaultConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
[].config.corsPolicy.defaultConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
[].config.corsPolicy.defaultConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
[].config.userConfig.defaultGroups |
Array |
Default groups each user in the zone inherits. |
[].config.mfaConfig.enabled |
Boolean |
Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
[].config.mfaConfig.providerName |
String |
The unique name of the MFA provider to use for this zone. |
[].config.mfaConfig.identityProviders |
Array |
Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Error Codes
Error Code | Description |
---|---|
400 | Bad Request |
401 | Unauthorized - Invalid token |
403 | Forbidden - Insufficient scope |
Updating an Identity Zone
$ curl 'http://localhost/identity-zones/twiglet-update' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 9bf8ca8dc327409984a65fc3f593ca08' \
-d '{
"subdomain" : "twiglet-update",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : -1,
"refreshTokenValidity" : -1,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "updatedKeyId",
"keys" : {
"updatedKeyId" : {
"signingKey" : "upD4t3d.s1gNiNg.K3y/t3XT"
}
}
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"key" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"passphrase" : "password",
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n",
"privateKey" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"privateKeyPassword" : "password"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Updated Twiglet Zone",
"version" : 0,
"description" : "Like the Twilight Zone but not tastier.",
"created" : 1594171382544,
"active" : true,
"last_modified" : 1594171382544
}'
PUT /identity-zones/twiglet-update HTTP/1.1
Content-Type: application/json
Authorization: Bearer 9bf8ca8dc327409984a65fc3f593ca08
Content-Length: 6471
Host: localhost
{
"subdomain" : "twiglet-update",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : -1,
"refreshTokenValidity" : -1,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "updatedKeyId",
"keys" : {
"updatedKeyId" : {
"signingKey" : "upD4t3d.s1gNiNg.K3y/t3XT"
}
}
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"key" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"passphrase" : "password",
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n",
"privateKey" : "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF\nAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr\nQA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS\nkQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce\n7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J\nBO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN\nA24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw==\n-----END RSA PRIVATE KEY-----\n",
"privateKeyPassword" : "password"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Updated Twiglet Zone",
"version" : 0,
"description" : "Like the Twilight Zone but not tastier.",
"created" : 1594171382544,
"active" : true,
"last_modified" : 1594171382544
}
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 5246
{
"id" : "twiglet-update",
"subdomain" : "twiglet-update",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : -1,
"refreshTokenValidity" : -1,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "updatedKeyId"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Updated Twiglet Zone",
"version" : 1,
"description" : "Like the Twilight Zone but not tastier.",
"created" : 1594171382531,
"active" : true,
"last_modified" : 1594171382561
}
Path Parameters
/identity-zones/{id}
Parameter | Description |
---|---|
id | Unique ID of the identity zone to update |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.write or uaa.admin . If you use the zone-switching header, bear token containing zones.<zone id>.admin can be used. |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
subdomain | String | Required | Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name | String | Required | Human-readable zone name |
description | String | Optional | Description of the zone |
version | Number | Optional | Reserved for future use of E-Tag versioning |
active | Boolean | Optional | Indicates whether the identity zone is active. Defaults to true. |
config.tokenPolicy.activeKeyId | String | Required if config.tokenPolicy.keys are set |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.keys.. | String | Optional | Keys which will be used to sign the token. If null value is specified for keys, then existing value will be retained. |
config.tokenPolicy.accessTokenValidity | Number | Optional | Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity | Number | Optional | Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable | Boolean | Optional | Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique | Boolean | Optional | If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat | String | Optional | The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.clientSecretPolicy.minLength | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength | Number | Required when clientSecretPolicy in the config is not null |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter | Number | Required when clientSecretPolicy in the config is not null |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.samlConfig.disableInResponseToCheck | Boolean | Optional | If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned | Boolean | Optional | If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned | Boolean | Optional | Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned | Boolean | Optional | Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned | Boolean | Optional | If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds | Number | Optional | The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID | String | Optional | Unique ID of the SAML2 entity |
config.samlConfig.certificate | String | Deprecated | Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.privateKey | String | Deprecated | Exposed SAML metadata property. The SAML provider's private key. |
config.samlConfig.privateKeyPassword | String | Deprecated | Exposed SAML metadata property. The SAML provider's private key password. Reserved for future use. |
config.samlConfig.activeKeyId | String | Required if a list of keys defined in keys map |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.key | String | Optional. Can only be used in conjunction with keys.<key-id>.passphrase and keys.<key-id>.certificate |
Exposed SAML metadata property. The SAML provider's private key. |
config.samlConfig.keys.*.passphrase | String | Optional. Can only be used in conjunction with keys.<key-id>.key and keys.<key-id>.certificate |
Exposed SAML metadata property. The SAML provider's private key password. Reserved for future use. |
config.samlConfig.keys.*.certificate | String | Optional. Can only be used in conjunction with keys.<key-id>.key and keys.<key-id>.passphrase |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.links.logout.redirectUrl | String | Optional | Logout redirect url |
config.links.homeRedirect | String | Optional | Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName | String | Optional | Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter | Boolean | Optional | Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist | Array | Optional | List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled | Boolean | Optional | Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup | Null | Optional | Where users are directed upon clicking the account creation link |
config.links.selfService.passwd | Null | Optional | Where users are directed upon clicking the password reset link |
config.prompts[] | Array | Optional | List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name | String | Optional | Name of field |
config.prompts[].type | String | Optional | What kind of field this is (e.g. text or password) |
config.prompts[].text | String | Optional | Actual text displayed on prompt for field |
config.idpDiscoveryEnabled | Boolean | Optional | IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled | Boolean | Optional | This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer | String | Optional | Issuer of this zone. Must be a valid URL. |
config.branding.companyName | String | Optional | This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo | String | Optional | This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo | String | Optional | This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText | String | Optional | This text appears on the footer of all UAA pages |
config.branding.footerLinks.* | String | Optional | These links (Map |
config.branding.banner.text | String | Optional | This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo | String | Optional | This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link | String | Optional | The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor | String | Optional | Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor | String | Optional | Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text | String | Optional. Must be set if configuring consent. | If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link | String | Optional. Can be null if configuring consent. | If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.xhrConfiguration.allowedOrigins | Array | Optional | Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns | Array | Optional | Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris | Array | Optional | The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns | Array | Optional | The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders | Array | Optional | Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods | Array | Optional | Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials | Boolean | Optional | Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge | Number | Optional | Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.defaultConfiguration.allowedOrigins | Array | Optional | Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns | Array | Optional | Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris | Array | Optional | The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns | Array | Optional | The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders | Array | Optional | Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods | Array | Optional | Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials | Boolean | Optional | Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge | Number | Optional | Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups | Array | Optional | Default groups each user in the zone inherits. |
config.mfaConfig.enabled | Boolean | Optional | Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName | String | Required when config.mfaConfig.enabled is true |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders | Array | Optional | Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Response Fields
Path | Type | Description |
---|---|---|
id |
String |
Unique ID of the identity zone |
subdomain |
String |
Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name |
String |
Human-readable zone name |
description |
String |
Description of the zone |
version |
Number |
Reserved for future use of E-Tag versioning |
active |
Boolean |
Indicates whether the identity zone is active. Defaults to true. |
config.tokenPolicy.activeKeyId |
String |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.accessTokenValidity |
Number |
Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity |
Number |
Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable |
Boolean |
Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique |
Boolean |
If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat |
String |
The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.clientSecretPolicy.minLength |
Number |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength |
Number |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter |
Number |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter |
Number |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit |
Number |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter |
Number |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.samlConfig.disableInResponseToCheck |
Boolean |
If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned |
Boolean |
If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned |
Boolean |
Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned |
Boolean |
Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned |
Boolean |
If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds |
Number |
The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID |
String |
Unique ID of the SAML2 entity |
config.samlConfig.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.activeKeyId |
String |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.links.logout.redirectUrl |
String |
Logout redirect url |
config.links.homeRedirect |
String |
Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName |
String |
Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter |
Boolean |
Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist |
Array |
List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled |
Boolean |
Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup |
Null |
Where users are directed upon clicking the account creation link |
config.links.selfService.passwd |
Null |
Where users are directed upon clicking the password reset link |
config.prompts[] |
Array |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name |
String |
Name of field |
config.prompts[].type |
String |
What kind of field this is (e.g. text or password) |
config.prompts[].text |
String |
Actual text displayed on prompt for field |
config.defaultIdentityProvider |
String |
This value can be set to the origin key of an identity provider. If set, the user will be directed to this identity provider automatically if no other identity provider is discovered or selected via login_hint. |
config.idpDiscoveryEnabled |
Boolean |
IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled |
Boolean |
This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer |
String |
Issuer of this zone. Must be a valid URL. |
config.branding.companyName |
String |
This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo |
String |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo |
String |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText |
String |
This text appears on the footer of all UAA pages |
config.branding.footerLinks.* |
String |
These links (Map |
config.branding.banner.text |
String |
This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo |
String |
This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link |
String |
The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor |
String |
Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor |
String |
Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text |
String |
If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link |
String |
If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.defaultConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.xhrConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups |
Array |
Default groups each user in the zone inherits. |
config.mfaConfig.enabled |
Boolean |
Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName |
String |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders |
Array |
Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Error Codes
Error Code | Description |
---|---|
400 | Bad Request |
401 | Unauthorized - Invalid token |
403 | Forbidden - Insufficient scope (zone admins can only update own zone) |
404 | Not Found - Update to nonexistent zone |
422 | Unprocessable Entity - Invalid zone details |
Deleting an Identity Zone
$ curl 'http://localhost/identity-zones/twiglet-delete' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ca6408e29faa45129190b6008c9d3106'
DELETE /identity-zones/twiglet-delete HTTP/1.1
Content-Type: application/json
Authorization: Bearer ca6408e29faa45129190b6008c9d3106
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 5181
{
"id" : "twiglet-delete",
"subdomain" : "twiglet-delete",
"config" : {
"clientSecretPolicy" : {
"minLength" : -1,
"maxLength" : -1,
"requireUpperCaseCharacter" : -1,
"requireLowerCaseCharacter" : -1,
"requireDigit" : -1,
"requireSpecialCharacter" : -1
},
"tokenPolicy" : {
"accessTokenValidity" : 3600,
"refreshTokenValidity" : 7200,
"jwtRevocable" : false,
"refreshTokenUnique" : false,
"refreshTokenFormat" : "jwt",
"activeKeyId" : "active-key-1"
},
"samlConfig" : {
"assertionSigned" : true,
"requestSigned" : true,
"wantAssertionSigned" : true,
"wantAuthnRequestSigned" : false,
"assertionTimeToLiveSeconds" : 600,
"activeKeyId" : "legacy-saml-key",
"keys" : {
"legacy-saml-key" : {
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
}
},
"entityID" : "cloudfoundry-saml-login",
"disableInResponseToCheck" : false,
"certificate" : "-----BEGIN CERTIFICATE-----\nMIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE\nMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl\nYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw\nODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE\nCAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs\nZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl\n8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID\nAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx\n8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy\n2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0\nHn+GmxZA\n-----END CERTIFICATE-----\n"
},
"corsPolicy" : {
"xhrConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
},
"defaultConfiguration" : {
"allowedOrigins" : [ ".*" ],
"allowedOriginPatterns" : [ ],
"allowedUris" : [ ".*" ],
"allowedUriPatterns" : [ ],
"allowedHeaders" : [ "Accept", "Authorization", "Content-Type" ],
"allowedMethods" : [ "GET" ],
"allowedCredentials" : false,
"maxAge" : 1728000
}
},
"links" : {
"logout" : {
"redirectUrl" : "/login",
"redirectParameterName" : "redirect",
"disableRedirectParameter" : false,
"whitelist" : null
},
"homeRedirect" : "http://my.hosted.homepage.com/",
"selfService" : {
"selfServiceLinksEnabled" : true,
"signup" : null,
"passwd" : null
}
},
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ],
"idpDiscoveryEnabled" : false,
"branding" : {
"companyName" : "Test Company",
"productLogo" : "VGVzdFByb2R1Y3RMb2dv",
"squareLogo" : "VGVzdFNxdWFyZUxvZ28=",
"footerLegalText" : "Test footer legal text",
"footerLinks" : {
"Support" : "http://support.example.com"
},
"banner" : {
"logo" : "VGVzdFByb2R1Y3RMb2dv",
"text" : "Announcement",
"textColor" : "#000000",
"backgroundColor" : "#89cff0",
"link" : "http://announce.example.com"
},
"consent" : {
"text" : "Some Policy",
"link" : "http://policy.example.com"
}
},
"accountChooserEnabled" : false,
"userConfig" : {
"defaultGroups" : [ "openid", "password.write", "uaa.user", "approvals.me", "profile", "roles", "user_attributes", "uaa.offline_token" ]
},
"mfaConfig" : {
"enabled" : false,
"identityProviders" : [ "uaa", "ldap" ]
},
"issuer" : "http://localhost:8080/uaa"
},
"name" : "The Twiglet Zone",
"version" : 0,
"created" : 1594171382318,
"active" : true,
"last_modified" : 1594171382318
}
Path Parameters
/identity-zones/{id}
Parameter | Description |
---|---|
id | Unique ID of the identity zone to delete |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.write or uaa.admin . If you use the zone-switching header, bear token containing zones.<zone id>.admin can be used. |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Response Fields
Path | Type | Description |
---|---|---|
id |
String |
Unique ID of the identity zone |
subdomain |
String |
Unique subdomain for the running instance. May only contain legal characters for a subdomain name. |
name |
String |
Human-readable zone name |
description |
String |
Description of the zone |
version |
Number |
Reserved for future use of E-Tag versioning |
active |
Boolean |
Indicates whether the identity zone is active. Defaults to true. |
config.tokenPolicy.activeKeyId |
String |
The ID for the key that is being used to sign tokens |
config.tokenPolicy.accessTokenValidity |
Number |
Time in seconds between when a access token is issued and when it expires. Defaults to global accessTokenValidity |
config.tokenPolicy.refreshTokenValidity |
Number |
Time in seconds between when a refresh token is issued and when it expires. Defaults to global refreshTokenValidity |
config.tokenPolicy.jwtRevocable |
Boolean |
Set to true if JWT tokens should be stored in the token store, and thus made individually revocable. Opaque tokens are always stored and revocable. |
config.tokenPolicy.refreshTokenUnique |
Boolean |
If true, uaa will only issue one refresh token per client_id/user_id combination. Defaults to false . |
config.tokenPolicy.refreshTokenFormat |
String |
The format for the refresh token. Allowed values are jwt , opaque . Defaults to jwt . |
config.clientSecretPolicy.minLength |
Number |
Minimum number of characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.maxLength |
Number |
Maximum number of characters required for secret to be considered valid (defaults to 255). |
config.clientSecretPolicy.requireUpperCaseCharacter |
Number |
Minimum number of uppercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireLowerCaseCharacter |
Number |
Minimum number of lowercase characters required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireDigit |
Number |
Minimum number of digits required for secret to be considered valid (defaults to 0). |
config.clientSecretPolicy.requireSpecialCharacter |
Number |
Minimum number of special characters required for secret to be considered valid (defaults to 0). |
config.samlConfig.disableInResponseToCheck |
Boolean |
If true , this zone will not validate the InResponseToField part of an incoming IDP assertion. Please see https://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-troubleshooting.html |
config.samlConfig.assertionSigned |
Boolean |
If true , the SAML provider will sign all assertions |
config.samlConfig.wantAssertionSigned |
Boolean |
Exposed SAML metadata property. If true , all assertions received by the SAML provider must be signed. Defaults to true . |
config.samlConfig.requestSigned |
Boolean |
Exposed SAML metadata property. If true , the service provider will sign all outgoing authentication requests. Defaults to true . |
config.samlConfig.wantAuthnRequestSigned |
Boolean |
If true , the authentication request from the partner service provider must be signed. |
config.samlConfig.assertionTimeToLiveSeconds |
Number |
The lifetime of a SAML assertion in seconds. Defaults to 600. |
config.samlConfig.entityID |
String |
Unique ID of the SAML2 entity |
config.samlConfig.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.samlConfig.activeKeyId |
String |
The ID of the key that should be used for signing metadata and assertions. |
config.samlConfig.keys.*.certificate |
String |
Exposed SAML metadata property. The certificate used to verify the authenticity all communications. |
config.links.logout.redirectUrl |
String |
Logout redirect url |
config.links.homeRedirect |
String |
Overrides the UAA home page and issues a redirect to this URL when the browser requests / and /home . |
config.links.logout.redirectParameterName |
String |
Changes the name of the redirect parameter |
config.links.logout.disableRedirectParameter |
Boolean |
Deprecated, no longer affects zone behavior. Whether or not to allow the redirect parameter on logout |
config.links.logout.whitelist |
Array |
List of allowed whitelist redirects |
config.links.selfService.selfServiceLinksEnabled |
Boolean |
Whether or not users are allowed to sign up or reset their passwords via the UI |
config.links.selfService.signup |
Null |
Where users are directed upon clicking the account creation link |
config.links.selfService.passwd |
Null |
Where users are directed upon clicking the password reset link |
config.prompts[] |
Array |
List of fields that users are prompted for to login. Defaults to username, password, and passcode. |
config.prompts[].name |
String |
Name of field |
config.prompts[].type |
String |
What kind of field this is (e.g. text or password) |
config.prompts[].text |
String |
Actual text displayed on prompt for field |
config.defaultIdentityProvider |
String |
This value can be set to the origin key of an identity provider. If set, the user will be directed to this identity provider automatically if no other identity provider is discovered or selected via login_hint. |
config.idpDiscoveryEnabled |
Boolean |
IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider |
config.accountChooserEnabled |
Boolean |
This flag is required to enable account choosing functionality for IDP discovery page. |
config.issuer |
String |
Issuer of this zone. Must be a valid URL. |
config.branding.companyName |
String |
This name is used on the UAA Pages and in account management related communication in UAA |
config.branding.productLogo |
String |
This is a base64Url encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc. |
config.branding.squareLogo |
String |
This is a base64 encoded PNG image which will be used as the favicon for the UAA pages |
config.branding.footerLegalText |
String |
This text appears on the footer of all UAA pages |
config.branding.footerLinks.* |
String |
These links (Map |
config.branding.banner.text |
String |
This is text displayed in a banner at the top of the UAA login page |
config.branding.banner.logo |
String |
This is base64 encoded PNG data displayed in a banner at the top of the UAA login page, overrides banner text |
config.branding.banner.link |
String |
The UAA login banner will be a link pointing to this url |
config.branding.banner.textColor |
String |
Hexadecimal color code for banner text color, does not allow color names |
config.branding.banner.backgroundColor |
String |
Hexadecimal color code for banner background color, does not allow color names |
config.branding.consent.text |
String |
If set, a checkbox on the registration and invitation pages will appear with the phrase I agree to followed by this text. The checkbox must be selected before the user can continue. |
config.branding.consent.link |
String |
If config.branding.consent.text is set, the text after I agree to will be hyperlinked to this location. |
config.corsPolicy.defaultConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.defaultConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.defaultConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.defaultConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.defaultConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.defaultConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.defaultConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.defaultConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.corsPolicy.xhrConfiguration.allowedOrigins |
Array |
Access-Control-Allow-Origin header . Indicates whether a resource can be shared based by returning the value of the Origin request header, "*", or "null" in the response. |
config.corsPolicy.xhrConfiguration.allowedOriginPatterns |
Array |
Indicates whether a resource can be shared based by returning the value of the Origin patterns. |
config.corsPolicy.xhrConfiguration.allowedUris |
Array |
The list of allowed URIs. |
config.corsPolicy.xhrConfiguration.allowedUriPatterns |
Array |
The list of allowed URI patterns. |
config.corsPolicy.xhrConfiguration.allowedHeaders |
Array |
Access-Control-Allow-Headers header. Indicates which header field names can be used during the actual response |
config.corsPolicy.xhrConfiguration.allowedMethods |
Array |
Access-Control-Allow-Methods header. Indicates which method will be used in the actual request as part of the preflight request. |
config.corsPolicy.xhrConfiguration.allowedCredentials |
Boolean |
Access-Control-Allow-Credentials header. Indicates whether the response to request can be exposed when the omit credentials flag is unset. When part of the response to a preflight request it indicates that the actual request can include user credentials.. |
config.corsPolicy.xhrConfiguration.maxAge |
Number |
Access-Control-Max-Age header. Indicates how long the results of a preflight request can be cached in a preflight result cache |
config.userConfig.defaultGroups |
Array |
Default groups each user in the zone inherits. |
config.mfaConfig.enabled |
Boolean |
Set true to enable Multi-factor Authentication (MFA) for the current zone. Defaults to false |
config.mfaConfig.providerName |
String |
The unique name of the MFA provider to use for this zone. |
config.mfaConfig.identityProviders |
Array |
Only trigger MFA when user is using an identity provider whose origin key matches one of these values |
Error Codes
Error Code | Description |
---|---|
400 | Bad Request |
401 | Unauthorized - Invalid token |
403 | Forbidden - Insufficient scope (zone admins can only delete their own zone) |
404 | Not Found - Zone does not exist |
Identity Providers
Create
SAML
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 94124b3e66924d6bba6126d49284f622' \
-d '{
"type" : "saml",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?><md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"http://www.okta.com/SAML\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\"true\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><md:KeyDescriptor use=\"signing\"><ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/></md:IDPSSODescriptor></md:EntityDescriptor>\n",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"originKey" : "SAML",
"name" : "SAML name",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
Authorization: Bearer 94124b3e66924d6bba6126d49284f622
Content-Length: 2990
Host: localhost
{
"type" : "saml",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?><md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"http://www.okta.com/SAML\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\"true\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><md:KeyDescriptor use=\"signing\"><ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/></md:IDPSSODescriptor></md:EntityDescriptor>\n",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"originKey" : "SAML",
"name" : "SAML name",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 3239
{
"type" : "saml",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?><md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"http://www.okta.com/SAML\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\"true\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><md:KeyDescriptor use=\"signing\"><ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\"/></md:IDPSSODescriptor></md:EntityDescriptor>\n",
"idpEntityAlias" : "SAML",
"zoneId" : "uaa",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"id" : "7ac3e849-389d-431a-8bf5-fad08d3d960f",
"originKey" : "SAML",
"name" : "SAML name",
"version" : 0,
"created" : 1594171384160,
"last_modified" : 1594171384160,
"active" : true,
"identityZoneId" : "uaa"
}
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 94124b3e66924d6bba6126d49284f622' \
-d '{
"type" : "saml",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : { },
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\"?>\n<md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" entityID=\"http://example.com/saml2/idp/metadata.php\" ID=\"_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Signature>\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference URI=\"#_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>HOSWDJYkLvErI1gVynUVmufFVDCKPqExLnnnMjXgoJQ=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ryMe0PXC+vR/c0nSEhSJsTaF0lHiuZ6PguqCbul7RC9WKLmFS9DD7Dgp3WHQ2zWpRimCTHxw/VO9hyCTxAcW9zxW4OdpD4YorqcmXtLkpasBCVuFLbQ8oylnjrem4kpGflfnuk3bW1mp6AXy52jwALDm8MsTwLK+O74YkeVTPP5bki/PK0N4jHnhYhvhHKUyT8Gug0v2o4KA/1ik83e9vcYEFc/9WGpXFeDMF6pXsJQqC/+eWoLfZJDNrwSsSlg+oD+ZF91YccN9i9lJoaIPcVvPWDfEv7vL79LgnmPBeYxm/fWb4/ANMxvCLIP1R3Ixrz5oFoIX2NP1+uZOpoRWbg==</ds:SignatureValue>\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>\n <md:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n <md:KeyDescriptor use=\"signing\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:KeyDescriptor use=\"encryption\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SingleLogoutService.php\"/>\n <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>\n <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SSOService.php\"/>\n </md:IDPSSODescriptor>\n <md:ContactPerson contactType=\"technical\">\n <md:GivenName>Filip</md:GivenName>\n <md:SurName>Hanik</md:SurName>\n <md:EmailAddress>[email protected]</md:EmailAddress>\n </md:ContactPerson>\n</md:EntityDescriptor>\n",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:transient",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"originKey" : "SAMLMetadataUrl",
"name" : "SAML name",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
Authorization: Bearer 94124b3e66924d6bba6126d49284f622
Content-Length: 7617
Host: localhost
{
"type" : "saml",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : { },
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\"?>\n<md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" entityID=\"http://example.com/saml2/idp/metadata.php\" ID=\"_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Signature>\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference URI=\"#_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>HOSWDJYkLvErI1gVynUVmufFVDCKPqExLnnnMjXgoJQ=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ryMe0PXC+vR/c0nSEhSJsTaF0lHiuZ6PguqCbul7RC9WKLmFS9DD7Dgp3WHQ2zWpRimCTHxw/VO9hyCTxAcW9zxW4OdpD4YorqcmXtLkpasBCVuFLbQ8oylnjrem4kpGflfnuk3bW1mp6AXy52jwALDm8MsTwLK+O74YkeVTPP5bki/PK0N4jHnhYhvhHKUyT8Gug0v2o4KA/1ik83e9vcYEFc/9WGpXFeDMF6pXsJQqC/+eWoLfZJDNrwSsSlg+oD+ZF91YccN9i9lJoaIPcVvPWDfEv7vL79LgnmPBeYxm/fWb4/ANMxvCLIP1R3Ixrz5oFoIX2NP1+uZOpoRWbg==</ds:SignatureValue>\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>\n <md:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n <md:KeyDescriptor use=\"signing\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:KeyDescriptor use=\"encryption\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SingleLogoutService.php\"/>\n <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>\n <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SSOService.php\"/>\n </md:IDPSSODescriptor>\n <md:ContactPerson contactType=\"technical\">\n <md:GivenName>Filip</md:GivenName>\n <md:SurName>Hanik</md:SurName>\n <md:EmailAddress>[email protected]</md:EmailAddress>\n </md:ContactPerson>\n</md:EntityDescriptor>\n",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:transient",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"originKey" : "SAMLMetadataUrl",
"name" : "SAML name",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 7877
{
"type" : "saml",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : { },
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"metaDataLocation" : "<?xml version=\"1.0\"?>\n<md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" entityID=\"http://example.com/saml2/idp/metadata.php\" ID=\"_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Signature>\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference URI=\"#_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>HOSWDJYkLvErI1gVynUVmufFVDCKPqExLnnnMjXgoJQ=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ryMe0PXC+vR/c0nSEhSJsTaF0lHiuZ6PguqCbul7RC9WKLmFS9DD7Dgp3WHQ2zWpRimCTHxw/VO9hyCTxAcW9zxW4OdpD4YorqcmXtLkpasBCVuFLbQ8oylnjrem4kpGflfnuk3bW1mp6AXy52jwALDm8MsTwLK+O74YkeVTPP5bki/PK0N4jHnhYhvhHKUyT8Gug0v2o4KA/1ik83e9vcYEFc/9WGpXFeDMF6pXsJQqC/+eWoLfZJDNrwSsSlg+oD+ZF91YccN9i9lJoaIPcVvPWDfEv7vL79LgnmPBeYxm/fWb4/ANMxvCLIP1R3Ixrz5oFoIX2NP1+uZOpoRWbg==</ds:SignatureValue>\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>\n <md:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n <md:KeyDescriptor use=\"signing\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:KeyDescriptor use=\"encryption\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </md:KeyDescriptor>\n <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SingleLogoutService.php\"/>\n <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>\n <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://example.com/saml2/idp/SSOService.php\"/>\n </md:IDPSSODescriptor>\n <md:ContactPerson contactType=\"technical\">\n <md:GivenName>Filip</md:GivenName>\n <md:SurName>Hanik</md:SurName>\n <md:EmailAddress>[email protected]</md:EmailAddress>\n </md:ContactPerson>\n</md:EntityDescriptor>\n",
"idpEntityAlias" : "SAMLMetadataUrl",
"zoneId" : "uaa",
"nameID" : "urn:oasis:names:tc:SAML:1.1:nameid-format:transient",
"assertionConsumerIndex" : 0,
"metadataTrustCheck" : false,
"showSamlLink" : false,
"linkText" : "IDPEndpointsMockTests Saml Provider:SAML",
"iconUrl" : null,
"groupMappingMode" : "EXPLICITLY_MAPPED",
"skipSslValidation" : false,
"authnContext" : null,
"socketFactoryClassName" : null
},
"id" : "a0597c17-bd40-4d87-902d-bce6baffac36",
"originKey" : "SAMLMetadataUrl",
"name" : "SAML name",
"version" : 0,
"created" : 1594171384270,
"last_modified" : 1594171384270,
"active" : true,
"identityZoneId" : "uaa"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | saml |
originKey | String | Required | A unique alias for the SAML provider |
config.skipSslValidation | Boolean | Optional (defaults to false ) |
Set to true, to skip SSL validation when fetching metadata. |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
config.metaDataLocation | String | Required | SAML Metadata - either an XML string or a URL that will deliver XML content |
config.nameID | String | Optional | The name ID to use for the username, default is "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified". |
config.assertionConsumerIndex | Number | Optional | SAML assertion consumer index, default is 0 |
config.metadataTrustCheck | Boolean | Optional | Should metadata be validated, defaults to false |
config.showSamlLink | Boolean | Optional | Should the SAML login link be displayed on the login page, defaults to false |
config.linkText | String | Required if the showSamlLink is set to true |
The link text for the SAML IDP on the login page |
config.groupMappingMode | String | Optional (defaults to "EXPLICITLY_MAPPED" ) |
Either EXPLICITLY_MAPPED in order to map external groups to OAuth scopes using the group mappings, or AS_SCOPES to use SAML group names as scopes. |
config.iconUrl | String | Optional | Reserved for future use |
config.socketFactoryClassName | Null | Optional | Property is deprecated and value is ignored. |
config.authnContext | Array | Optional | List of AuthnContextClassRef to include in the SAMLRequest. If not specified no AuthnContext will be requested. |
config.attributeMappings.user_name | String | Optional (defaults to "NameID" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for SAML is NameID . |
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.email | String | Optional | Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name | String | Optional | Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional | Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional | Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups | Array | Optional | Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] | String | Optional | Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
Response Fields
Path | Type | Description |
---|---|---|
name |
String |
Human-readable name for this provider |
config.providerDescription |
String |
Human readable name/description of this provider |
config.emailDomain |
Array |
List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active |
Boolean |
Defaults to true. |
config.addShadowUserOnLogin |
Boolean |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes |
Boolean |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type |
String |
saml |
originKey |
String |
A unique alias for the SAML provider |
config.skipSslValidation |
Boolean |
Set to true, to skip SSL validation when fetching metadata. |
config.storeCustomAttributes |
Boolean |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
config.metaDataLocation |
String |
SAML Metadata - either an XML string or a URL that will deliver XML content |
config.nameID |
String |
The name ID to use for the username, default is "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified". |
config.assertionConsumerIndex |
Number |
SAML assertion consumer index, default is 0 |
config.metadataTrustCheck |
Boolean |
Should metadata be validated, defaults to false |
config.showSamlLink |
Boolean |
Should the SAML login link be displayed on the login page, defaults to false |
config.linkText |
String |
The link text for the SAML IDP on the login page |
config.groupMappingMode |
String |
Either EXPLICITLY_MAPPED in order to map external groups to OAuth scopes using the group mappings, or AS_SCOPES to use SAML group names as scopes. |
config.iconUrl |
String |
Reserved for future use |
config.socketFactoryClassName |
Null |
Property is deprecated and value is ignored. |
config.authnContext |
Array |
List of AuthnContextClassRef to include in the SAMLRequest. If not specified no AuthnContext will be requested. |
config.attributeMappings.user_name |
String |
Map user_name to the attribute for user name in the provider assertion or token. The default for SAML is NameID . |
config.attributeMappings |
Object |
Map external attribute to UAA recognized mappings. |
config.attributeMappings.email |
String |
Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name |
String |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name |
String |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number |
String |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified |
String |
Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups |
Array |
Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] |
String |
Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
version |
Number |
Version of the identity provider data. Clients can use this to protect against conflicting updates |
id |
String |
Unique identifier for this provider - GUID generated by the UAA |
config.additionalConfiguration |
Object |
(Unused.) |
identityZoneId |
String |
Set to the zone that this provider will be active in. Determined either by the Host header or the zone switch header. |
created |
Number |
UAA sets the creation date |
last_modified |
Number |
UAA sets the modification date |
config.idpEntityAlias |
String |
This will be set to originKey |
config.zoneId |
String |
This will be set to the ID of the zone where the provider is being created |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
LDAP
LDAP supports several different configurations. The most common one is that authentication is done using a search and bind strategy. The available strategies for authentication are
- Bind authentication - the UAA uses the user's credentials to construct a DN and attempt a BIND operation to the LDAP server
- Search and Bind authentication - We take the username and password, search for the user DN, and attempt a bind operation to the LDAP server
- Search and Compare authentication - We take the username and password, search for the user DN and the user password, and perform a comparison of the provided password with the LDAP password
Group integration also supports different strategies
- No group integration - LDAP is only used for authentication
- Map a group to a UAA scope - using external group mappings
- LDAP groups contain scopes - an entry in the LDAP record contains UAA scope names
LDAP Simple Bind
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-Identity-Zone-Subdomain: ard7ytxm' \
-H 'Authorization: Bearer 624e309549534b118dcd66f1ee9fb58d' \
-d '{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-simple-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : "cn={0},ou=Users,dc=test,dc=com",
"userDNPatternDelimiter" : ";",
"bindUserDn" : null,
"userSearchBase" : null,
"userSearchFilter" : null,
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-null.xml",
"groupSearchBase" : null,
"groupSearchFilter" : null,
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 10,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
X-Identity-Zone-Subdomain: ard7ytxm
Authorization: Bearer 624e309549534b118dcd66f1ee9fb58d
Content-Length: 1201
Host: localhost
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-simple-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : "cn={0},ou=Users,dc=test,dc=com",
"userDNPatternDelimiter" : ";",
"bindUserDn" : null,
"userSearchBase" : null,
"userSearchFilter" : null,
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-null.xml",
"groupSearchBase" : null,
"groupSearchFilter" : null,
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 10,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1402
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-simple-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : "cn={0},ou=Users,dc=test,dc=com",
"userDNPatternDelimiter" : ";",
"bindUserDn" : null,
"userSearchBase" : null,
"userSearchFilter" : null,
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-null.xml",
"groupSearchBase" : null,
"groupSearchFilter" : null,
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 10,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"id" : "f92beabe-e641-4cf5-a718-5529232ae285",
"originKey" : "ldap",
"name" : "ldap name",
"version" : 0,
"created" : 1594171386038,
"last_modified" : 1594171386038,
"active" : true,
"identityZoneId" : "ard7ytxm"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Missing or invalid token |
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
LDAP Search and Bind
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-Identity-Zone-Subdomain: l7j8cbrz' \
-H 'Authorization: Bearer a4a6ab1b62d543ada6512556c86af93f' \
-d '{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"bindPassword" : "adminsecret",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : "{0}@my.org",
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-map-to-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
X-Identity-Zone-Subdomain: l7j8cbrz
Authorization: Bearer a4a6ab1b62d543ada6512556c86af93f
Content-Length: 1306
Host: localhost
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"bindPassword" : "adminsecret",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : "{0}@my.org",
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-map-to-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1471
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-bind.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : null,
"passwordEncoder" : null,
"localPasswordCompare" : null,
"mailAttributeName" : "mail",
"mailSubstitute" : "{0}@my.org",
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-map-to-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : null,
"tlsConfiguration" : "none"
},
"id" : "c3416dff-9ab8-46c9-a934-1fa4c62d9c85",
"originKey" : "ldap",
"name" : "ldap name",
"version" : 0,
"created" : 1594171384501,
"last_modified" : 1594171384501,
"active" : true,
"identityZoneId" : "l7j8cbrz"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Missing or invalid token |
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
LDAP Search and Compare
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-Identity-Zone-Subdomain: estabrwk' \
-H 'Authorization: Bearer b91481241f12463390938d504d59a251' \
-d '{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-compare.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"bindPassword" : "adminsecret",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : "userPassword",
"passwordEncoder" : "org.cloudfoundry.identity.uaa.provider.ldap.DynamicPasswordComparator",
"localPasswordCompare" : true,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-as-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : "description",
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
X-Identity-Zone-Subdomain: estabrwk
Authorization: Bearer b91481241f12463390938d504d59a251
Content-Length: 1383
Host: localhost
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-compare.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"bindPassword" : "adminsecret",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : "userPassword",
"passwordEncoder" : "org.cloudfoundry.identity.uaa.provider.ldap.DynamicPasswordComparator",
"localPasswordCompare" : true,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-as-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : "description",
"tlsConfiguration" : "none"
},
"originKey" : "ldap",
"name" : "ldap name",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1548
{
"type" : "ldap",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"ldapProfileFile" : "ldap/ldap-search-and-compare.xml",
"baseUrl" : "ldap://localhost:23389",
"referral" : null,
"skipSSLVerification" : false,
"userDNPattern" : null,
"userDNPatternDelimiter" : null,
"bindUserDn" : "cn=admin,ou=Users,dc=test,dc=com",
"userSearchBase" : "dc=test,dc=com",
"userSearchFilter" : "cn={0}",
"passwordAttributeName" : "userPassword",
"passwordEncoder" : "org.cloudfoundry.identity.uaa.provider.ldap.DynamicPasswordComparator",
"localPasswordCompare" : true,
"mailAttributeName" : "mail",
"mailSubstitute" : null,
"mailSubstituteOverridesLdap" : false,
"ldapGroupFile" : "ldap/ldap-groups-as-scopes.xml",
"groupSearchBase" : "ou=scopes,dc=test,dc=com",
"groupSearchFilter" : "member={0}",
"groupsIgnorePartialResults" : null,
"autoAddGroups" : true,
"groupSearchSubTree" : true,
"maxGroupSearchDepth" : 3,
"groupRoleAttribute" : "description",
"tlsConfiguration" : "none"
},
"id" : "35cc8b0e-a664-4659-bf95-0c3d5d1cc278",
"originKey" : "ldap",
"name" : "ldap name",
"version" : 0,
"created" : 1594171385417,
"last_modified" : 1594171385417,
"active" : true,
"identityZoneId" : "estabrwk"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | ldap |
originKey | String | Required | Origin key must be ldap for an LDAP provider |
config.ldapProfileFile | String | Required | The file to be used for configuring the LDAP authentication. Options are: ldap/ldap-simple-bind.xml , ldap/ldap-search-and-bind.xml , ldap/ldap-search-and-compare.xml |
config.ldapGroupFile | String | Required | The file to be used for group integration. Options are: ldap/ldap-groups-null.xml , ldap/ldap-groups-as-scopes.xml , ldap/ldap-groups-map-to-scopes.xml |
config.baseUrl | String | Required | The URL to the ldap server, must start with ldap:// or ldaps:// |
config.bindPassword | String | Required | Used with search-and-bind and search-and-compare . Password for the LDAP ID that performs a search of the LDAP tree for user information. |
config.mailAttributeName | String | Optional (defaults to "mail" ) |
The name of the LDAP attribute that contains the user's email address |
config.mailSubstitute | String | Optional | Defines an email pattern containing a {0} to generate an email address for an LDAP user during authentication |
config.mailSubstituteOverridesLdap | Boolean | Optional (defaults to false ) |
Set to true if you wish to override an LDAP user email address with a generated one |
config.skipSSLVerification | Boolean | Optional (defaults to false ) |
Skips validation of the LDAP cert if set to true. |
config.tlsConfiguration | String | Optional (defaults to "none" ) |
Sets the StartTLS options, valid values are none , simple or external |
config.referral | String | Optional (defaults to "follow" ) |
Configures the UAA LDAP referral behavior. The following values are possible:
|
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.user_name | String | Optional (defaults to "user_name" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for LDAP is the User Name filter |
config.attributeMappings.first_name | String | Optional (defaults to "givenname" ) |
Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional (defaults to "sn" ) |
Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional (defaults to "telephonenumber" ) |
Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
Error Codes
Error Code | Description |
---|---|
401 | Unauthorized - Missing or invalid token |
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
OAuth/OIDC
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer d1438befcc8840bf89e173ef7ab1b4d9' \
-d '{
"type" : "oauth2.0",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : "http://auth.url",
"tokenUrl" : "http://token.url",
"tokenKeyUrl" : null,
"tokenKey" : "token-key",
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : false,
"relyingPartyId" : "uaa",
"relyingPartySecret" : "secret",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username"
},
"originKey" : "my-oauth2-provider",
"name" : "UAA Provider",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
Authorization: Bearer d1438befcc8840bf89e173ef7ab1b4d9
Content-Length: 989
Host: localhost
{
"type" : "oauth2.0",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : "http://auth.url",
"tokenUrl" : "http://token.url",
"tokenKeyUrl" : null,
"tokenKey" : "token-key",
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : false,
"relyingPartyId" : "uaa",
"relyingPartySecret" : "secret",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username"
},
"originKey" : "my-oauth2-provider",
"name" : "UAA Provider",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1213
{
"type" : "oauth2.0",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : "http://auth.url",
"tokenUrl" : "http://token.url",
"tokenKeyUrl" : null,
"tokenKey" : "token-key",
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : false,
"relyingPartyId" : "uaa",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username",
"checkTokenUrl" : null
},
"id" : "29084018-7706-4efc-8fd1-200beda98bac",
"originKey" : "my-oauth2-provider",
"name" : "UAA Provider",
"version" : 0,
"created" : 1594171385116,
"last_modified" : 1594171385116,
"active" : true,
"identityZoneId" : "uaa"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | "oauth2.0" |
originKey | String | Required | A unique alias for a OAuth provider |
config.authUrl | String | Required | The OAuth 2.0 authorization endpoint URL |
config.tokenUrl | String | Required | The OAuth 2.0 token endpoint URL |
config.tokenKeyUrl | String | Optional | The URL of the token key endpoint which renders a verification key for validating token signatures |
config.tokenKey | String | Optional | A verification key for validating token signatures, set to null if a tokenKeyUrl is provided. |
config.showLinkText | Boolean | Optional (defaults to true ) |
A flag controlling whether a link to this provider's login will be shown on the UAA login page |
config.linkText | String | Optional | Text to use for the login link to the provider |
config.relyingPartyId | String | Required | The client ID which is registered with the external OAuth provider for use by the UAA |
config.skipSslValidation | Boolean | Optional | A flag controlling whether SSL validation should be skipped when communicating with the external OAuth server |
config.scopes | Array | Optional | What scopes to request on a call to the external OAuth provider |
config.checkTokenUrl | Object | Optional | Reserved for future OAuth use. |
config.responseType | String | Optional (defaults to "code" ) |
Response type for the authorize request, will be sent to OAuth server, defaults to code |
config.clientAuthInBody | Boolean | Optional (defaults to false ) |
Sends the client credentials in the token retrieval call as body parameters instead of a Basic Authorization header. |
config.issuer | String | Optional | The OAuth 2.0 token issuer. This value is used to validate the issuer inside the token. |
config.userPropagationParameter | String | Optional (defaults to "username" ) |
Name of the request parameter that is used to pass a known username when redirecting to this identity provider from the account chooser |
config.attributeMappings.user_name | String | Optional (defaults to "sub" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for OpenID Connect is sub |
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.email | String | Optional | Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name | String | Optional | Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional | Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional | Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups | Array | Optional | Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] | String | Optional | Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
config.relyingPartySecret | String | Required | The client secret of the relying party at the external OAuth provider |
Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | "oauth2.0" |
originKey | String | Required | A unique alias for a OAuth provider |
config.authUrl | String | Required | The OAuth 2.0 authorization endpoint URL |
config.tokenUrl | String | Required | The OAuth 2.0 token endpoint URL |
config.tokenKeyUrl | String | Optional | The URL of the token key endpoint which renders a verification key for validating token signatures |
config.tokenKey | String | Optional | A verification key for validating token signatures, set to null if a tokenKeyUrl is provided. |
config.showLinkText | Boolean | Optional (defaults to true ) |
A flag controlling whether a link to this provider's login will be shown on the UAA login page |
config.linkText | String | Optional | Text to use for the login link to the provider |
config.relyingPartyId | String | Required | The client ID which is registered with the external OAuth provider for use by the UAA |
config.skipSslValidation | Boolean | Optional | A flag controlling whether SSL validation should be skipped when communicating with the external OAuth server |
config.scopes | Array | Optional | What scopes to request on a call to the external OAuth provider |
config.checkTokenUrl | Object | Optional | Reserved for future OAuth use. |
config.responseType | String | Optional (defaults to "code" ) |
Response type for the authorize request, will be sent to OAuth server, defaults to code |
config.clientAuthInBody | Boolean | Optional (defaults to false ) |
Sends the client credentials in the token retrieval call as body parameters instead of a Basic Authorization header. |
config.issuer | String | Optional | The OAuth 2.0 token issuer. This value is used to validate the issuer inside the token. |
config.userPropagationParameter | String | Optional (defaults to "username" ) |
Name of the request parameter that is used to pass a known username when redirecting to this identity provider from the account chooser |
config.attributeMappings.user_name | String | Optional (defaults to "sub" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for OpenID Connect is sub |
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.email | String | Optional | Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name | String | Optional | Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional | Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional | Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups | Array | Optional | Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] | String | Optional | Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
config.relyingPartySecret | String | Required | The client secret of the relying party at the external OAuth provider |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
$ curl 'http://localhost/identity-providers?rawConfig=true' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 72d51f940fdc46c190e7e1d3d25323ee' \
-d '{
"type" : "oidc1.0",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ "uaa.user" ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : null,
"tokenUrl" : null,
"tokenKeyUrl" : null,
"tokenKey" : null,
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : true,
"relyingPartyId" : "uaa",
"relyingPartySecret" : "secret",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username",
"userInfoUrl" : null,
"discoveryUrl" : "https://accounts.google.com/.well-known/openid-configuration",
"passwordGrantEnabled" : false,
"setForwardHeader" : false,
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ]
},
"originKey" : "my-oidc-provider-unjxwx",
"name" : "UAA Provider",
"active" : true
}'
POST /identity-providers?rawConfig=true HTTP/1.1
Content-Type: application/json
Authorization: Bearer 72d51f940fdc46c190e7e1d3d25323ee
Content-Length: 1508
Host: localhost
{
"type" : "oidc1.0",
"config" : {
"emailDomain" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ "uaa.user" ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : null,
"tokenUrl" : null,
"tokenKeyUrl" : null,
"tokenKey" : null,
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : true,
"relyingPartyId" : "uaa",
"relyingPartySecret" : "secret",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username",
"userInfoUrl" : null,
"discoveryUrl" : "https://accounts.google.com/.well-known/openid-configuration",
"passwordGrantEnabled" : false,
"setForwardHeader" : false,
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ]
},
"originKey" : "my-oidc-provider-unjxwx",
"name" : "UAA Provider",
"active" : true
}
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 1667
{
"type" : "oidc1.0",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"externalGroupsWhitelist" : [ "uaa.user" ],
"attributeMappings" : {
"email_verified" : "emailVerified",
"external_groups" : [ "roles" ],
"user.attribute.department" : "department",
"phone_number" : "telephone",
"given_name" : "first_name",
"family_name" : "last_name",
"email" : "emailAddress"
},
"addShadowUserOnLogin" : true,
"storeCustomAttributes" : true,
"authUrl" : null,
"tokenUrl" : null,
"tokenKeyUrl" : null,
"tokenKey" : null,
"linkText" : null,
"showLinkText" : false,
"clientAuthInBody" : false,
"skipSslValidation" : true,
"relyingPartyId" : "uaa",
"scopes" : null,
"issuer" : null,
"responseType" : "code",
"userPropagationParameter" : "username",
"userInfoUrl" : null,
"discoveryUrl" : "https://accounts.google.com/.well-known/openid-configuration",
"passwordGrantEnabled" : false,
"setForwardHeader" : false,
"prompts" : [ {
"name" : "username",
"type" : "text",
"text" : "Email"
}, {
"name" : "password",
"type" : "password",
"text" : "Password"
}, {
"name" : "passcode",
"type" : "password",
"text" : "Temporary Authentication Code (Get on at /passcode)"
} ]
},
"id" : "c9b88126-a6c0-4487-a715-34e9ffbaa601",
"originKey" : "my-oidc-provider-unjxwx",
"name" : "UAA Provider",
"version" : 0,
"created" : 1594171385176,
"last_modified" : 1594171385176,
"active" : true,
"identityZoneId" : "uaa"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | "oidc1.0" |
originKey | String | Required | A unique alias for the OIDC 1.0 provider |
config.discoveryUrl | String | Optional | The OpenID Connect Discovery URL, typically ends with /.well-known/openid-configurationmit |
config.authUrl | String | Required unless discoveryUrl is set. |
The OIDC 1.0 authorization endpoint URL. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenUrl | String | Required unless discoveryUrl is set. |
The OIDC 1.0 token endpoint URL. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenKeyUrl | String | Required unless discoveryUrl is set. |
The URL of the token key endpoint which renders a verification key for validating token signatures. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenKey | String | Required unless discoveryUrl is set. |
A verification key for validating token signatures. We recommend not setting this as it will not allow for key rotation. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.showLinkText | Boolean | Optional (defaults to true ) |
A flag controlling whether a link to this provider's login will be shown on the UAA login page |
config.linkText | String | Optional | Text to use for the login link to the provider |
config.relyingPartyId | String | Required | The client ID which is registered with the external OAuth provider for use by the UAA |
config.skipSslValidation | Boolean | Optional | A flag controlling whether SSL validation should be skipped when communicating with the external OAuth server |
config.scopes | Array | Optional | What scopes to request on a call to the external OAuth/OpenID provider. For example, can provide openid , roles , or profile to request ID token, scopes populated in the ID token external groups attribute mappings, or the user profile information, respectively. |
config.checkTokenUrl | Object | Optional | Reserved for future OAuth/OIDC use. |
config.clientAuthInBody | Boolean | Optional (defaults to false ) |
Sends the client credentials in the token retrieval call as body parameters instead of a Basic Authorization header. |
config.userInfoUrl | Object | Optional | Reserved for future OIDC use. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.responseType | String | Optional (defaults to "code" ) |
Response type for the authorize request, defaults to code , but can be code id_token if the OIDC server can return an id_token as a query parameter in the redirect. |
config.issuer | String | Optional | The OAuth 2.0 token issuer. This value is used to validate the issuer inside the token. |
config.userPropagationParameter | String | Optional (defaults to "username" ) |
Name of the request parameter that is used to pass a known username when redirecting to this identity provider from the account chooser |
config.externalGroupsWhitelist | Array | Optional | JSON Array containing the groups names which need to be populated in the user's id_token or response from /userinfo endpoint. If you don't specify the whitelist no groups will be populated in the id_token or /userinfo response.Please note that regex is allowed. Acceptable patterns are
|
config.passwordGrantEnabled | Boolean | Optional (defaults to false ) |
Enable Resource Owner Password Grant flow for this identity provider. |
config.setForwardHeader | Boolean | Optional (defaults to false ) |
Only effective, if Password Grant enabled. Set X-Forward-For header in Password Grant request to this identity provider. |
config.attributeMappings.user_name | String | Optional (defaults to "sub" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for OpenID Connect is sub . |
config.prompts[] | Array | Optional | List of fields that users are prompted on to the OIDC provider through the password grant flow. Defaults to username, password, and passcode. Any additional prompts beyond username, password, and passcode will be forwarded on to the OIDC provider. |
config.prompts[].name | String | Optional | Name of field |
config.prompts[].type | String | Optional | What kind of field this is (e.g. text or password) |
config.prompts[].text | String | Optional | Actual text displayed on prompt for field |
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.email | String | Optional | Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name | String | Optional | Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional | Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional | Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups | Array | Optional | Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] | String | Optional | Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
config.relyingPartySecret | String | Required | The client secret of the relying party at the external OAuth provider |
Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | "oidc1.0" |
originKey | String | Required | A unique alias for the OIDC 1.0 provider |
config.discoveryUrl | String | Optional | The OpenID Connect Discovery URL, typically ends with /.well-known/openid-configurationmit |
config.authUrl | String | Required unless discoveryUrl is set. |
The OIDC 1.0 authorization endpoint URL. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenUrl | String | Required unless discoveryUrl is set. |
The OIDC 1.0 token endpoint URL. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenKeyUrl | String | Required unless discoveryUrl is set. |
The URL of the token key endpoint which renders a verification key for validating token signatures. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.tokenKey | String | Required unless discoveryUrl is set. |
A verification key for validating token signatures. We recommend not setting this as it will not allow for key rotation. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.showLinkText | Boolean | Optional (defaults to true ) |
A flag controlling whether a link to this provider's login will be shown on the UAA login page |
config.linkText | String | Optional | Text to use for the login link to the provider |
config.relyingPartyId | String | Required | The client ID which is registered with the external OAuth provider for use by the UAA |
config.skipSslValidation | Boolean | Optional | A flag controlling whether SSL validation should be skipped when communicating with the external OAuth server |
config.scopes | Array | Optional | What scopes to request on a call to the external OAuth/OpenID provider. For example, can provide openid , roles , or profile to request ID token, scopes populated in the ID token external groups attribute mappings, or the user profile information, respectively. |
config.checkTokenUrl | Object | Optional | Reserved for future OAuth/OIDC use. |
config.clientAuthInBody | Boolean | Optional (defaults to false ) |
Sends the client credentials in the token retrieval call as body parameters instead of a Basic Authorization header. |
config.userInfoUrl | Object | Optional | Reserved for future OIDC use. This can be left blank if a discovery URL is provided. If both are provided, this property overrides the discovery URL. |
config.responseType | String | Optional (defaults to "code" ) |
Response type for the authorize request, defaults to code , but can be code id_token if the OIDC server can return an id_token as a query parameter in the redirect. |
config.issuer | String | Optional | The OAuth 2.0 token issuer. This value is used to validate the issuer inside the token. |
config.userPropagationParameter | String | Optional (defaults to "username" ) |
Name of the request parameter that is used to pass a known username when redirecting to this identity provider from the account chooser |
config.externalGroupsWhitelist | Array | Optional | JSON Array containing the groups names which need to be populated in the user's id_token or response from /userinfo endpoint. If you don't specify the whitelist no groups will be populated in the id_token or /userinfo response.Please note that regex is allowed. Acceptable patterns are
|
config.passwordGrantEnabled | Boolean | Optional (defaults to false ) |
Enable Resource Owner Password Grant flow for this identity provider. |
config.setForwardHeader | Boolean | Optional (defaults to false ) |
Only effective, if Password Grant enabled. Set X-Forward-For header in Password Grant request to this identity provider. |
config.attributeMappings.user_name | String | Optional (defaults to "sub" ) |
Map user_name to the attribute for user name in the provider assertion or token. The default for OpenID Connect is sub . |
config.prompts[] | Array | Optional | List of fields that users are prompted on to the OIDC provider through the password grant flow. Defaults to username, password, and passcode. Any additional prompts beyond username, password, and passcode will be forwarded on to the OIDC provider. |
config.prompts[].name | String | Optional | Name of field |
config.prompts[].type | String | Optional | What kind of field this is (e.g. text or password) |
config.prompts[].text | String | Optional | Actual text displayed on prompt for field |
config.attributeMappings | Object | Optional | Map external attribute to UAA recognized mappings. |
config.attributeMappings.email | String | Optional | Map email to the attribute for email in the provider assertion or token. |
config.attributeMappings.given_name | String | Optional | Map given_name to the attribute for given name in the provider assertion or token. |
config.attributeMappings.family_name | String | Optional | Map family_name to the attribute for family name in the provider assertion or token. |
config.attributeMappings.phone_number | String | Optional | Map phone_number to the attribute for phone number in the provider assertion or token. |
config.attributeMappings.email_verified | String | Optional | Maps the attribute on the assertion to the email_verified user record at the time of authentication. Default is false. Once set to true, record remains true for subsequent authentications. |
config.attributeMappings.external_groups | Array | Optional | Map external_groups to the attribute for groups in the provider assertion. |
config.attributeMappings['user.attribute.department'] | String | Optional | Map external attribute to UAA recognized mappings. Mapping should be of the format user.attribute.<attribute_name> . department is used in the documentation as an example attribute. |
config.relyingPartySecret | String | Required | The client secret of the relying party at the external OAuth provider |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
409 | Conflict - Provider with same origin and zone id exists |
422 | Unprocessable Entity - Invalid configuration |
500 | Internal Server Error |
Retrieve All
$ curl 'http://localhost/identity-providers?rawConfig=false' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 58fa1ee857e440fdbc3c18fc23f4417d'
GET /identity-providers?rawConfig=false HTTP/1.1
Content-Type: application/json
Authorization: Bearer 58fa1ee857e440fdbc3c18fc23f4417d
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 15625
[ {
"type" : "saml",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{\"email_verified\":\"emailVerified\",\"external_groups\":[\"roles\"],\"user.attribute.department\":\"department\",\"phone_number\":\"telephone\",\"given_name\":\"first_name\",\"family_name\":\"last_name\",\"email\":\"emailAddress\"},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"http://www.okta.com/SAML\\\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\\\"true\\\" protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"><md:KeyDescriptor use=\\\"signing\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/></md:IDPSSODescriptor></md:EntityDescriptor>\\n\",\"idpEntityAlias\":\"SAML\",\"zoneId\":\"uaa\",\"nameID\":\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\"assertionConsumerIndex\":0,\"metadataTrustCheck\":false,\"showSamlLink\":false,\"linkText\":\"IDPEndpointsMockTests Saml Provider:SAML\",\"iconUrl\":null,\"groupMappingMode\":\"EXPLICITLY_MAPPED\",\"skipSslValidation\":false,\"authnContext\":null,\"socketFactoryClassName\":null}",
"id" : "7ac3e849-389d-431a-8bf5-fad08d3d960f",
"originKey" : "SAML",
"name" : "SAML name",
"version" : 0,
"created" : 1594171384160,
"last_modified" : 1594171384160,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "saml",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"metaDataLocation\":\"<?xml version=\\\"1.0\\\"?>\\n<md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\" entityID=\\\"http://example.com/saml2/idp/metadata.php\\\" ID=\\\"_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\\\"><ds:Signature>\\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/>\\n <ds:SignatureMethod Algorithm=\\\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\\\"/>\\n <ds:Reference URI=\\\"#_7a1d882b1a0cb702f97968d831d70eecce036d6d0c249ae65cca0e91f5656d58\\\"><ds:Transforms><ds:Transform Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\\\"/><ds:Transform Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/></ds:Transforms><ds:DigestMethod Algorithm=\\\"http://www.w3.org/2001/04/xmlenc#sha256\\\"/><ds:DigestValue>HOSWDJYkLvErI1gVynUVmufFVDCKPqExLnnnMjXgoJQ=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ryMe0PXC+vR/c0nSEhSJsTaF0lHiuZ6PguqCbul7RC9WKLmFS9DD7Dgp3WHQ2zWpRimCTHxw/VO9hyCTxAcW9zxW4OdpD4YorqcmXtLkpasBCVuFLbQ8oylnjrem4kpGflfnuk3bW1mp6AXy52jwALDm8MsTwLK+O74YkeVTPP5bki/PK0N4jHnhYhvhHKUyT8Gug0v2o4KA/1ik83e9vcYEFc/9WGpXFeDMF6pXsJQqC/+eWoLfZJDNrwSsSlg+oD+ZF91YccN9i9lJoaIPcVvPWDfEv7vL79LgnmPBeYxm/fWb4/ANMxvCLIP1R3Ixrz5oFoIX2NP1+uZOpoRWbg==</ds:SignatureValue>\\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>\\n <md:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\">\\n <md:KeyDescriptor use=\\\"signing\\\">\\n <ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\">\\n <ds:X509Data>\\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\\n </ds:X509Data>\\n </ds:KeyInfo>\\n </md:KeyDescriptor>\\n <md:KeyDescriptor use=\\\"encryption\\\">\\n <ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\">\\n <ds:X509Data>\\n <ds:X509Certificate>MIIEEzCCAvugAwIBAgIJAIc1qzLrv+5nMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ08xFDASBgNVBAcMC0Nhc3RsZSBSb2NrMRwwGgYDVQQKDBNTYW1sIFRlc3RpbmcgU2VydmVyMQswCQYDVQQLDAJJVDEgMB4GA1UEAwwXc2ltcGxlc2FtbHBocC5jZmFwcHMuaW8xIDAeBgkqhkiG9w0BCQEWEWZoYW5pa0BwaXZvdGFsLmlvMB4XDTE1MDIyMzIyNDUwM1oXDTI1MDIyMjIyNDUwM1owgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDTzEUMBIGA1UEBwwLQ2FzdGxlIFJvY2sxHDAaBgNVBAoME1NhbWwgVGVzdGluZyBTZXJ2ZXIxCzAJBgNVBAsMAklUMSAwHgYDVQQDDBdzaW1wbGVzYW1scGhwLmNmYXBwcy5pbzEgMB4GCSqGSIb3DQEJARYRZmhhbmlrQHBpdm90YWwuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4cn62E1xLqpN34PmbrKBbkOXFjzWgJ9b+pXuaRft6A339uuIQeoeH5qeSKRVTl32L0gdz2ZivLwZXW+cqvftVW1tvEHvzJFyxeTW3fCUeCQsebLnA2qRa07RkxTo6Nf244mWWRDodcoHEfDUSbxfTZ6IExSojSIU2RnD6WllYWFdD1GFpBJOmQB8rAc8wJIBdHFdQnX8Ttl7hZ6rtgqEYMzYVMuJ2F2r1HSU1zSAvwpdYP6rRGFRJEfdA9mm3WKfNLSc5cljz0X/TXy0vVlAV95l9qcfFzPmrkNIst9FZSwpvB49LyAVke04FQPPwLgVH4gphiJH3jvZ7I+J5lS8VAgMBAAGjUDBOMB0GA1UdDgQWBBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAfBgNVHSMEGDAWgBTTyP6Cc5HlBJ5+ucVCwGc5ogKNGzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAvMS4EQeP/ipV4jOG5lO6/tYCb/iJeAduOnRhkJk0DbX329lDLZhTTL/x/w/9muCVcvLrzEp6PN+VWfw5E5FWtZN0yhGtP9R+vZnrV+oc2zGD+no1/ySFOe3EiJCO5dehxKjYEmBRv5sU/LZFKZpozKN/BMEa6CqLuxbzb7ykxVr7EVFXwltPxzE9TmL9OACNNyF5eJHWMRMllarUvkcXlh4pux4ks9e6zV9DQBy2zds9f1I3qxg0eX6JnGrXi/ZiCT+lJgVe3ZFXiejiLAiKB04sXW3ti0LW3lx13Y1YlQ4/tlpgTgfIJxKV6nyPiLoK0nywbMd+vpAirDt2Oc+hk</ds:X509Certificate>\\n </ds:X509Data>\\n </ds:KeyInfo>\\n </md:KeyDescriptor>\\n <md:SingleLogoutService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"http://example.com/saml2/idp/SingleLogoutService.php\\\"/>\\n <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>\\n <md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"http://example.com/saml2/idp/SSOService.php\\\"/>\\n </md:IDPSSODescriptor>\\n <md:ContactPerson contactType=\\\"technical\\\">\\n <md:GivenName>Filip</md:GivenName>\\n <md:SurName>Hanik</md:SurName>\\n <md:EmailAddress>[email protected]</md:EmailAddress>\\n </md:ContactPerson>\\n</md:EntityDescriptor>\\n\",\"idpEntityAlias\":\"SAMLMetadataUrl\",\"zoneId\":\"uaa\",\"nameID\":\"urn:oasis:names:tc:SAML:1.1:nameid-format:transient\",\"assertionConsumerIndex\":0,\"metadataTrustCheck\":false,\"showSamlLink\":false,\"linkText\":\"IDPEndpointsMockTests Saml Provider:SAML\",\"iconUrl\":null,\"groupMappingMode\":\"EXPLICITLY_MAPPED\",\"skipSslValidation\":false,\"authnContext\":null,\"socketFactoryClassName\":null}",
"id" : "a0597c17-bd40-4d87-902d-bce6baffac36",
"originKey" : "SAMLMetadataUrl",
"name" : "SAML name",
"version" : 0,
"created" : 1594171384270,
"last_modified" : 1594171384270,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "keystone",
"config" : "null",
"id" : "0aa2929b-a50d-4cb5-9331-a78e4b2af501",
"originKey" : "keystone",
"name" : "keystone",
"version" : 0,
"created" : 946684800000,
"last_modified" : 946684800000,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "ldap",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"ldapProfileFile\":\"ldap/ldap-search-and-bind.xml\",\"baseUrl\":\"ldap://localhost:389/\",\"referral\":null,\"skipSSLVerification\":false,\"userDNPattern\":null,\"userDNPatternDelimiter\":null,\"bindUserDn\":\"cn=admin,dc=test,dc=com\",\"userSearchBase\":\"dc=test,dc=com\",\"userSearchFilter\":\"cn={0}\",\"passwordAttributeName\":null,\"passwordEncoder\":null,\"localPasswordCompare\":null,\"mailAttributeName\":\"mail\",\"mailSubstitute\":null,\"mailSubstituteOverridesLdap\":false,\"ldapGroupFile\":null,\"groupSearchBase\":null,\"groupSearchFilter\":null,\"groupsIgnorePartialResults\":null,\"autoAddGroups\":true,\"groupSearchSubTree\":true,\"maxGroupSearchDepth\":10,\"groupRoleAttribute\":null,\"tlsConfiguration\":\"none\"}",
"id" : "24979205-5128-431a-be85-66d6a890d71d",
"originKey" : "ldap",
"name" : "UAA LDAP Provider",
"version" : 1,
"created" : 946684800000,
"last_modified" : 1594171383708,
"active" : false,
"identityZoneId" : "uaa"
}, {
"type" : "login-server",
"config" : "null",
"id" : "9d1f7314-33f6-4dd0-8b3a-3e1cb3900d24",
"originKey" : "login-server",
"name" : "login-server",
"version" : 0,
"created" : 946684800000,
"last_modified" : 946684800000,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "oauth2.0",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{\"email_verified\":\"emailVerified\",\"external_groups\":[\"roles\"],\"user.attribute.department\":\"department\",\"phone_number\":\"telephone\",\"given_name\":\"first_name\",\"family_name\":\"last_name\",\"email\":\"emailAddress\"},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"authUrl\":\"http://auth.url\",\"tokenUrl\":\"http://token.url\",\"tokenKeyUrl\":null,\"tokenKey\":\"token-key\",\"linkText\":null,\"showLinkText\":false,\"clientAuthInBody\":false,\"skipSslValidation\":false,\"relyingPartyId\":\"uaa\",\"scopes\":null,\"issuer\":null,\"responseType\":\"code\",\"userPropagationParameter\":\"username\",\"checkTokenUrl\":null}",
"id" : "29084018-7706-4efc-8fd1-200beda98bac",
"originKey" : "my-oauth2-provider",
"name" : "UAA Provider",
"version" : 0,
"created" : 1594171385116,
"last_modified" : 1594171385116,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "oidc1.0",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[\"uaa.user\"],\"attributeMappings\":{\"email_verified\":\"emailVerified\",\"external_groups\":[\"roles\"],\"user.attribute.department\":\"department\",\"phone_number\":\"telephone\",\"given_name\":\"first_name\",\"family_name\":\"last_name\",\"email\":\"emailAddress\"},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"authUrl\":null,\"tokenUrl\":null,\"tokenKeyUrl\":null,\"tokenKey\":null,\"linkText\":null,\"showLinkText\":false,\"clientAuthInBody\":false,\"skipSslValidation\":true,\"relyingPartyId\":\"uaa\",\"scopes\":null,\"issuer\":null,\"responseType\":\"code\",\"userPropagationParameter\":\"username\",\"userInfoUrl\":null,\"discoveryUrl\":\"https://accounts.google.com/.well-known/openid-configuration\",\"passwordGrantEnabled\":false,\"setForwardHeader\":false,\"prompts\":[{\"name\":\"username\",\"type\":\"text\",\"text\":\"Email\"},{\"name\":\"password\",\"type\":\"password\",\"text\":\"Password\"},{\"name\":\"passcode\",\"type\":\"password\",\"text\":\"Temporary Authentication Code (Get on at /passcode)\"}]}",
"id" : "c9b88126-a6c0-4487-a715-34e9ffbaa601",
"originKey" : "my-oidc-provider-unjxwx",
"name" : "UAA Provider",
"version" : 0,
"created" : 1594171385176,
"last_modified" : 1594171385176,
"active" : true,
"identityZoneId" : "uaa"
}, {
"type" : "uaa",
"config" : "null",
"id" : "eb9f1724-dbb3-4bcc-964f-ef601bd07d09",
"originKey" : "uaa",
"name" : "uaa",
"version" : 3,
"created" : 946684800000,
"last_modified" : 1594171385239,
"active" : true,
"identityZoneId" : "uaa"
} ]
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or zones.<zone id>.idps.read or uaa.admin or idps.read (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or zones.<zone id>.idps.read or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Response Fields
Path | Type | Description |
---|---|---|
[].type |
String |
Type of the identity provider. |
[].originKey |
String |
Unique identifier for the identity provider. |
[].name |
String |
Human-readable name for this provider |
[].config |
String |
Json config for the Identity Provider |
[].version |
Number |
Version of the identity provider data. Clients can use this to protect against conflicting updates |
[].active |
Boolean |
Defaults to true. |
[].id |
String |
Unique identifier for this provider - GUID generated by the UAA |
[].identityZoneId |
String |
Set to the zone that this provider will be active in. Determined either by the Host header or the zone switch header. |
[].created |
Number |
UAA sets the creation date |
[].last_modified |
Number |
UAA sets the modification date |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
Retrieve
$ curl 'http://localhost/identity-providers/41c6ddb9-cb1a-474c-9d86-457527d15fad?rawConfig=false' -i -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer dbfcfc1e24454b929fa118a83953a7a3'
GET /identity-providers/41c6ddb9-cb1a-474c-9d86-457527d15fad?rawConfig=false HTTP/1.1
Content-Type: application/json
Authorization: Bearer dbfcfc1e24454b929fa118a83953a7a3
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 3207
{
"type" : "saml",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{\"email_verified\":\"emailVerified\",\"external_groups\":[\"roles\"],\"user.attribute.department\":\"department\",\"phone_number\":\"telephone\",\"given_name\":\"first_name\",\"family_name\":\"last_name\",\"email\":\"emailAddress\"},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"http://www.okta.com/saml-for-get\\\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\\\"true\\\" protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"><md:KeyDescriptor use=\\\"signing\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/></md:IDPSSODescriptor></md:EntityDescriptor>\\n\",\"idpEntityAlias\":\"saml-for-get\",\"zoneId\":\"uaa\",\"nameID\":\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\"assertionConsumerIndex\":0,\"metadataTrustCheck\":false,\"showSamlLink\":false,\"linkText\":\"IDPEndpointsMockTests Saml Provider:saml-for-get\",\"iconUrl\":null,\"groupMappingMode\":\"EXPLICITLY_MAPPED\",\"skipSslValidation\":false,\"authnContext\":null,\"socketFactoryClassName\":null}",
"id" : "41c6ddb9-cb1a-474c-9d86-457527d15fad",
"originKey" : "saml-for-get",
"name" : "saml-for-get name",
"version" : 0,
"created" : 1594171385048,
"last_modified" : 1594171385048,
"active" : true,
"identityZoneId" : "uaa"
}
Path Parameters
/identity-providers/{id}
Parameter | Description |
---|---|
id | Unique identifier for this provider - GUID generated by the UAA |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or zones.<zone id>.idps.read or uaa.admin or idps.read (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or zones.<zone id>.idps.read or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Response Fields
Path | Type | Description |
---|---|---|
name |
String |
Human-readable name for this provider |
config.providerDescription |
String |
Human readable name/description of this provider |
config.emailDomain |
Array |
List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active |
Boolean |
Defaults to true. |
config.addShadowUserOnLogin |
Boolean |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes |
Boolean |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type |
String |
Type of the identity provider. |
originKey |
String |
Unique identifier for the identity provider. |
config |
String |
Various configuration properties for the identity provider. |
config.additionalConfiguration |
Object |
(Unused.) |
version |
Number |
Version of the identity provider data. Clients can use this to protect against conflicting updates |
id |
String |
Unique identifier for this provider - GUID generated by the UAA |
identityZoneId |
String |
Set to the zone that this provider will be active in. Determined either by the Host header or the zone switch header. |
created |
Number |
UAA sets the creation date |
last_modified |
Number |
UAA sets the modification date |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
Update
$ curl 'http://localhost/identity-providers/eb9f1724-dbb3-4bcc-964f-ef601bd07d09?rawConfig=true' -i -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer bcbff4cfba984db0b7b74ca66442e7de' \
-d '{"type":"uaa","config":{"emailDomain":null,"providerDescription":null,"passwordPolicy":null,"lockoutPolicy":{"lockoutPeriodSeconds":8,"lockoutAfterFailures":8,"countFailuresWithin":8},"disableInternalUserManagement":false},"originKey":"uaa","name":"uaa","version":3,"active":true}'
PUT /identity-providers/eb9f1724-dbb3-4bcc-964f-ef601bd07d09?rawConfig=true HTTP/1.1
Content-Type: application/json
Authorization: Bearer bcbff4cfba984db0b7b74ca66442e7de
Content-Length: 280
Host: localhost
{"type":"uaa","config":{"emailDomain":null,"providerDescription":null,"passwordPolicy":null,"lockoutPolicy":{"lockoutPeriodSeconds":8,"lockoutAfterFailures":8,"countFailuresWithin":8},"disableInternalUserManagement":false},"originKey":"uaa","name":"uaa","version":3,"active":true}
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 559
{
"type" : "uaa",
"config" : {
"emailDomain" : null,
"additionalConfiguration" : null,
"providerDescription" : null,
"passwordPolicy" : null,
"lockoutPolicy" : {
"lockoutPeriodSeconds" : 8,
"lockoutAfterFailures" : 8,
"countFailuresWithin" : 8
},
"disableInternalUserManagement" : false
},
"id" : "eb9f1724-dbb3-4bcc-964f-ef601bd07d09",
"originKey" : "uaa",
"name" : "uaa",
"version" : 4,
"created" : 946684800000,
"last_modified" : 1594171385864,
"active" : true,
"identityZoneId" : "uaa"
}
Path Parameters
/identity-providers/{id}
Parameter | Description |
---|---|
id | Unique identifier for this provider - GUID generated by the UAA |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Request and Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
name | String | Required | Human-readable name for this provider |
config.providerDescription | String | Optional | Human readable name/description of this provider |
config.emailDomain | Array | Optional | List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active | Boolean | Optional | Defaults to true. |
config.addShadowUserOnLogin | Boolean | Optional (defaults to true ) |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes | Boolean | Optional (defaults to true ) |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type | String | Required | uaa |
originKey | String | Required | A unique identifier for the IDP. Cannot be updated. |
version | Number | Required | Version of the identity provider data. Clients can use this to protect against conflicting updates |
config.passwordPolicy.minLength | Number | Required when passwordPolicy in the config is not null |
Minimum number of characters required for password to be considered valid (defaults to 0). |
config.passwordPolicy.maxLength | Number | Required when passwordPolicy in the config is not null |
Maximum number of characters required for password to be considered valid (defaults to 255). |
config.passwordPolicy.requireUpperCaseCharacter | Number | Required when passwordPolicy in the config is not null |
Minimum number of uppercase characters required for password to be considered valid (defaults to 0). |
config.passwordPolicy.requireLowerCaseCharacter | Number | Required when passwordPolicy in the config is not null |
Minimum number of lowercase characters required for password to be considered valid (defaults to 0). |
config.passwordPolicy.requireDigit | Number | Required when passwordPolicy in the config is not null |
Minimum number of digits required for password to be considered valid (defaults to 0). |
config.passwordPolicy.requireSpecialCharacter | Number | Required when passwordPolicy in the config is not null |
Minimum number of special characters required for password to be considered valid (defaults to 0). |
config.passwordPolicy.expirePasswordInMonths | Number | Required when passwordPolicy in the config is not null |
Number of months after which current password expires (defaults to 0). |
config.passwordPolicy.passwordNewerThan | Number | Required when passwordPolicy in the config is not null |
This timestamp value can be used to force change password for every user. If the user's passwordLastModified is older than this value, the password is expired (defaults to null). |
config.lockoutPolicy.lockoutPeriodSeconds | Number | Required when LockoutPolicy in the config is not null |
Number of seconds in which lockoutAfterFailures failures must occur in order for account to be locked (defaults to 3600). |
config.lockoutPolicy.lockoutAfterFailures | Number | Required when LockoutPolicy in the config is not null |
Number of allowed failures before account is locked (defaults to 5). |
config.lockoutPolicy.countFailuresWithin | Number | Required when LockoutPolicy in the config is not null |
Number of seconds to lock out an account when lockoutAfterFailures failures is exceeded (defaults to 300). |
config.disableInternalUserManagement | Boolean | Optional | When set to true, user management is disabled for this provider, defaults to false |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
422 | Unprocessable Entity - Invalid config |
Delete
$ curl 'http://localhost/identity-providers/13223802-e41a-4cf1-966b-5610956e7fc8' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer e3d4b285d6174cf0be5e22e61052d5aa'
DELETE /identity-providers/13223802-e41a-4cf1-966b-5610956e7fc8 HTTP/1.1
Content-Type: application/json
Authorization: Bearer e3d4b285d6174cf0be5e22e61052d5aa
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 3222
{
"type" : "saml",
"config" : "{\"emailDomain\":null,\"additionalConfiguration\":null,\"providerDescription\":null,\"externalGroupsWhitelist\":[],\"attributeMappings\":{\"email_verified\":\"emailVerified\",\"external_groups\":[\"roles\"],\"user.attribute.department\":\"department\",\"phone_number\":\"telephone\",\"given_name\":\"first_name\",\"family_name\":\"last_name\",\"email\":\"emailAddress\"},\"addShadowUserOnLogin\":true,\"storeCustomAttributes\":true,\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"http://www.okta.com/saml-for-delete\\\"><md:IDPSSODescriptor WantAuthnRequestsSigned=\\\"true\\\" protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"><md:KeyDescriptor use=\\\"signing\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG\\nA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU\\nMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu\\nZm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC\\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM\\nBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN\\nAQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU\\nWWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O\\nBw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL\\n3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk\\nvvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6\\nGFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFb</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/><md:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://pivotal.oktapreview.com/app/pivotal_pivotalcfstaging_1/k2lw4l5bPODCMIIDBRYZ/sso/saml\\\"/></md:IDPSSODescriptor></md:EntityDescriptor>\\n\",\"idpEntityAlias\":\"saml-for-delete\",\"zoneId\":\"uaa\",\"nameID\":\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\"assertionConsumerIndex\":0,\"metadataTrustCheck\":false,\"showSamlLink\":false,\"linkText\":\"IDPEndpointsMockTests Saml Provider:saml-for-delete\",\"iconUrl\":null,\"groupMappingMode\":\"EXPLICITLY_MAPPED\",\"skipSslValidation\":false,\"authnContext\":null,\"socketFactoryClassName\":null}",
"id" : "13223802-e41a-4cf1-966b-5610956e7fc8",
"originKey" : "saml-for-delete",
"name" : "saml-for-delete name",
"version" : 0,
"created" : 1594171385792,
"last_modified" : 1594171385792,
"active" : true,
"identityZoneId" : "uaa"
}
Path Parameters
/identity-providers/{id}
Parameter | Description |
---|---|
id | Unique identifier for this provider - GUID generated by the UAA |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
rawConfig | Boolean | Optional (defaults to false ) |
UAA 3.4.0 Flag indicating whether the response should use raw, unescaped JSON for the config field of the IDP, rather than the default behavior of encoding the JSON as a string. |
Response Fields
Path | Type | Description |
---|---|---|
name |
String |
Human-readable name for this provider |
config.providerDescription |
String |
Human readable name/description of this provider |
config.emailDomain |
Array |
List of email domains associated with the provider for the purpose of associating users to the correct origin upon invitation. If empty list, no invitations are accepted. Wildcards supported. |
active |
Boolean |
Defaults to true. |
config.addShadowUserOnLogin |
Boolean |
Determines whether users should be allowed to authenticate without having a user pre-populated in the users database (if true), or whether shadow users must be created before login by an administrator (if false). |
config.storeCustomAttributes |
Boolean |
Set to true, to store custom user attributes to be fetched from the /userinfo endpoint |
type |
String |
Type of the identity provider. |
originKey |
String |
Unique identifier for the identity provider. |
config |
String |
Various configuration properties for the identity provider. |
config.additionalConfiguration |
Object |
(Unused.) |
version |
Number |
Version of the identity provider data. Clients can use this to protect against conflicting updates |
id |
String |
Unique identifier for this provider - GUID generated by the UAA |
identityZoneId |
String |
Set to the zone that this provider will be active in. Determined either by the Host header or the zone switch header. |
created |
Number |
UAA sets the creation date |
last_modified |
Number |
UAA sets the modification date |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
422 | Unprocessable Entity |
Force password change for Users
$ curl 'http://localhost/identity-providers/eb9f1724-dbb3-4bcc-964f-ef601bd07d09/status' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer cd0102f4da0f4243ad1b87137bd2ca21' \
-d '{"requirePasswordChange":true}'
PATCH /identity-providers/eb9f1724-dbb3-4bcc-964f-ef601bd07d09/status HTTP/1.1
Content-Type: application/json
Authorization: Bearer cd0102f4da0f4243ad1b87137bd2ca21
Content-Length: 30
Host: localhost
{"requirePasswordChange":true}
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 36
{
"requirePasswordChange" : true
}
Path Parameters
/identity-providers/{id}/status
Parameter | Description |
---|---|
id | Unique identifier for this provider - GUID generated by the UAA |
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing zones.<zone id>.admin or uaa.admin or idps.write (only in the same zone that you are a user of) |
X-Identity-Zone-Id |
May include this header to administer another zone if using zones.<zoneId>.admin or uaa.admin scope against the default UAA zone. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what Identity Zone this request goes to by supplying a subdomain. |
Request and Response Fields
Path | Type | Constraints | Description |
---|---|---|---|
requirePasswordChange | Boolean | Required | Set to true in order to force password change for all users. The passwordNewerThan property in PasswordPolicy of the IdentityProvider will be updated with current system time. If the user's passwordLastModified is older than this value, the password is expired. |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
422 | Unprocessable Entity - Invalid config |
Service Providers
UAA is capable of acting as a SAML Identity Provider (IdP). When UAA receives a SAML authentication request from a recognized SAML Service Provider (SP), UAA will authenticate the user then send a SAML authentication response back to the SAML SP. If UAA succesfully authenticated the user the SAML authentication response will contain a SAML assertion as per specification.
Obtaining the UAA SAML IdP metadata:
In order to establish trust, a SAML IdP and SAML SP exchange SAML metadata which contains pulbic certificates as well as the endpoints used to communicate amongst each other. Your SAML SP will likely require the UAA SAML IdP metadata in order to make authentication requests to UAA. You can obtain this metadata by making a GET request to the /saml/idp/metadata endpoint.
GET http://localhost:8080/uaa/saml/idp/metadata
Initiate IDP Login Flow
When the UAA is an IdP, you can initiate the login flow to the Service Provider, SP, by using the initiate
endpoint
This is a browser flow.
$ curl 'http://o7ukl5kluew6nfaqffjodycj.localhost/saml/idp/initiate?sp=XlDhYhy163.cloudfoundry-saml-login' -i -X GET
GET /saml/idp/initiate?sp=XlDhYhy163.cloudfoundry-saml-login HTTP/1.1
Host: o7ukl5kluew6nfaqffjodycj.localhost
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
</head>
<body onload="document.forms[0].submit()">
<noscript>
<p>
<strong>Note:</strong> Since your browser does not support JavaScript,
you must press the Continue button once to proceed.
</p>
</noscript>
<form action="http://XlDhYhy163.localhost:8080/uaa/saml/SSO/alias/XlDhYhy163.cloudfoundry-saml-login" method="post">
<div>
<input type="hidden" name="SAMLResponse" value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDJwOlJlc3BvbnNlIHhtbG5zOnNhbWwycD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBEZXN0aW5hdGlvbj0iaHR0cDovL1hsRGhZaHkxNjMubG9jYWxob3N0OjgwODAvdWFhL3NhbWwvU1NPL2FsaWFzL1hsRGhZaHkxNjMuY2xvdWRmb3VuZHJ5LXNhbWwtbG9naW4iIElEPSJhM2g4MWdmYzJnMDJiNWNiMTI1YjJkNTRmN2o4ZWRhIiBJc3N1ZUluc3RhbnQ9IjIwMjAtMDctMDhUMDE6MjM6MDkuNTEyWiIgVmVyc2lvbj0iMi4wIj48c2FtbDI6SXNzdWVyIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj5vN3VrbDVrbHVldzZuZmFxZmZqb2R5Y2ouY2xvdWRmb3VuZHJ5LXNhbWwtbG9naW48L3NhbWwyOklzc3Vlcj48c2FtbDJwOlN0YXR1cz48c2FtbDJwOlN0YXR1c0NvZGUgVmFsdWU9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6U3VjY2VzcyIvPjwvc2FtbDJwOlN0YXR1cz48c2FtbDI6QXNzZXJ0aW9uIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBJRD0iYTUzYmFnOTUxM2doajI1NDFjaWg3YTYzY2RmMzBiYSIgSXNzdWVJbnN0YW50PSIyMDIwLTA3LTA4VDAxOjIzOjA5LjQzMloiIFZlcnNpb249IjIuMCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48c2FtbDI6SXNzdWVyPm83dWtsNWtsdWV3Nm5mYXFmZmpvZHljai5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbjwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjYTUzYmFnOTUxM2doajI1NDFjaWg3YTYzY2RmMzBiYSI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyI+PGVjOkluY2x1c2l2ZU5hbWVzcGFjZXMgeG1sbnM6ZWM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIgUHJlZml4TGlzdD0ieHMiLz48L2RzOlRyYW5zZm9ybT48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPjNkT3YzbHgzYVhaemZCekhLZTZBb0NPYjUwaz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU+YmIzendLZ3BZay83SDFDdkxBN3VQVEVWMnVYV2s5czEyWjIxeEFTZ2xKRk5mWXViUk1PeUtyQUJoTTZXQW9UeXRSV2JxekhMUEllbDBBaDFVVEpKbjgwMXNoaktZYVJVUWRvR0FwdG1sdFh1UnlhYVRWNnk4eUlMVnNJNDRpampRY0RuQUVBRWNLSjVqazJNSEFJV3dZNXJFWUs2NFdkQnBMN0NiL041Yy80PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRFNUQ0NBcktnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQjhNUXN3Q1FZRFZRUUdFd0poZHpFT01Bd0dBMVVFQ0JNRgpZWEoxWW1FeERqQU1CZ05WQkFvVEJXRnlkV0poTVE0d0RBWURWUVFIRXdWaGNuVmlZVEVPTUF3R0ExVUVDeE1GWVhKMVltRXhEakFNCkJnTlZCQU1UQldGeWRXSmhNUjB3R3dZSktvWklodmNOQVFrQkZnNWhjblZpWVVCaGNuVmlZUzVoY2pBZUZ3MHhOVEV4TWpBeU1qSTIKTWpkYUZ3MHhOakV4TVRreU1qSTJNamRhTUh3eEN6QUpCZ05WQkFZVEFtRjNNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRQpDaE1GWVhKMVltRXhEakFNQmdOVkJBY1RCV0Z5ZFdKaE1RNHdEQVlEVlFRTEV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4CkhUQWJCZ2txaGtpRzl3MEJDUUVXRG1GeWRXSmhRR0Z5ZFdKaExtRnlNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKZ1FESHRDNWdVWHhCS3BFcVpUTGtOdkZ3TkduTklrZ2dOT3dPUVZOYnBPMFdWSElpdmlnNUwzOVdxUzl1MGhuQStPN01DQS9LbHJBUgo0YlhhZVZWaHdmVVBZQktJcGFhVFdGUVI1Y1RSMVVGWkpML09GOXZBZnBPd3pub0Q2NkREQ25RVnBiQ2p0RFlXWCt4NmlteG44SENZCnhoTW9sNlpuVGJTc0ZXNlZaakZNalFJREFRQUJvNEhhTUlIWE1CMEdBMVVkRGdRV0JCVHgwbER6akgvaU9Cbk9TUWFTRVdRTHgxc3kKR0RDQnB3WURWUjBqQklHZk1JR2NnQlR4MGxEempIL2lPQm5PU1FhU0VXUUx4MXN5R0tHQmdLUitNSHd4Q3pBSkJnTlZCQVlUQW1GMwpNUTR3REFZRFZRUUlFd1ZoY25WaVlURU9NQXdHQTFVRUNoTUZZWEoxWW1FeERqQU1CZ05WQkFjVEJXRnlkV0poTVE0d0RBWURWUVFMCkV3VmhjblZpWVRFT01Bd0dBMVVFQXhNRllYSjFZbUV4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUZ5ZFdKaFFHRnlkV0poTG1GeWdnRUEKTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFZdkJKMEhPWmJiSENsWG1HVWpHcytHUyt4QzFGTy9hbQoyc3VDU1lxTkI5ZHlNWGZPV2lKMStUTEprK28vWVp0OHZ1eENLZGNaWWdsNGwvTDZQeEo5ODJTUmhjODNaVzJka0FaSTRNMC9VZDNvCmVQZTg0azhqbTNBN0V2SDV3aTVodkNrS1JwdVJCd24zRWkrakNSb3V4VGJ6S1BzdUNWQisxc055eE1UWHpmMD08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbDI6U3ViamVjdD48c2FtbDI6TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPm1hcmlzc2E8L3NhbWwyOk5hbWVJRD48c2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxzYW1sMjpTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBOb3RPbk9yQWZ0ZXI9IjIwMjAtMDctMDhUMDE6MjM6MDkuNDQxWiIgUmVjaXBpZW50PSJodHRwOi8vWGxEaFloeTE2My5sb2NhbGhvc3Q6ODA4MC91YWEvc2FtbC9TU08vYWxpYXMvWGxEaFloeTE2My5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbiIvPjwvc2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWwyOlN1YmplY3Q+PHNhbWwyOkNvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDIwLTA3LTA4VDAxOjIzOjA5LjQzN1oiIE5vdE9uT3JBZnRlcj0iMjAyMC0wNy0wOFQwMToyMzowOS40MzdaIj48c2FtbDI6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDI6QXVkaWVuY2U+WGxEaFloeTE2My5jbG91ZGZvdW5kcnktc2FtbC1sb2dpbjwvc2FtbDI6QXVkaWVuY2U+PC9zYW1sMjpBdWRpZW5jZVJlc3RyaWN0aW9uPjwvc2FtbDI6Q29uZGl0aW9ucz48c2FtbDI6QXV0aG5TdGF0ZW1lbnQgQXV0aG5JbnN0YW50PSIyMDIwLTA3LTA4VDAxOjIzOjA5LjQzNFoiIFNlc3Npb25JbmRleD0iYTUxZmI2NzczZ2hlMDkwYzI5MGlnOGFpZmJoZ2piOSI+PHNhbWwyOkF1dGhuQ29udGV4dD48c2FtbDI6QXV0aG5Db250ZXh0Q2xhc3NSZWY+dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQ8L3NhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPjwvc2FtbDI6QXV0aG5Db250ZXh0Pjwvc2FtbDI6QXV0aG5TdGF0ZW1lbnQ+PHNhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImF1dGhvcml0aWVzIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+dWFhLnVzZXI8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0iZW1haWwiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhQHRlc3Qub3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9ImlkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+OWEzZTU1Y2ItZmQwZS00ZmZkLTg5NjEtNzU1ZTA0ODljMTM3PC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im5hbWUiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im9yaWdpbiI+PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPnVhYTwvc2FtbDI6QXR0cmlidXRlVmFsdWU+PC9zYW1sMjpBdHRyaWJ1dGU+PHNhbWwyOkF0dHJpYnV0ZSBOYW1lPSJ6b25lSWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5vN3VrbDVrbHVldzZuZmFxZmZqb2R5Y2o8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0ib3JnYW5pemF0aW9uLWVtYWlscyI+PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPmNvbnRhY3RAZGVtb29yZy5jb208L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5pbmZvQGRlbW8ub3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9Im9yZ2FuaXphdGlvbi1uYW1lIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+VGhlIERlbW8gT3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIE5hbWU9InByaW1hcnktZW1haWwiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5tYXJpc3NhQHRlc3Qub3JnPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48L3NhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48L3NhbWwyOkFzc2VydGlvbj48L3NhbWwycDpSZXNwb25zZT4="/>
</div>
<noscript>
<div>
<input type="submit" value="Continue"/>
</div>
</noscript>
</form>
</body>
</html>
Request Parameters
Parameter | Type | Constraints | Description |
---|---|---|---|
sp | String | required | The entity ID of a configured and active the service provider. |
Error Codes
Error Code | Description |
---|---|
400 | If IDP initiated login is not enabled, the SP parameter is incorrect or SP is disabled. |
List
$ curl 'http://localhost/saml/service-providers' -i -X GET \
-H 'Authorization: Bearer 5f95cb1066a74ea9a0821532087077f8'
GET /saml/service-providers HTTP/1.1
Authorization: Bearer 5f95cb1066a74ea9a0821532087077f8
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 7326
[ {
"config" : "{\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" ID=\\\"2NMYzwXxeT.cloudfoundry-saml-login\\\" entityID=\\\"2NMYzwXxeT.cloudfoundry-saml-login\\\"><ds:Signature xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/><ds:SignatureMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\\\"/><ds:Reference URI=\\\"#2NMYzwXxeT.cloudfoundry-saml-login\\\"><ds:Transforms><ds:Transform Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\\\"/><ds:Transform Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/></ds:Transforms><ds:DigestMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#sha1\\\"/><ds:DigestValue>zALgjEFJ7jJSwn2AOBH5H8CX93U=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>Rp5XH8eT0ek/vlFGzHgIFOeESchOwSYZ9oh4JA9WqQ0jJtvNQ9IttY2QY9XK3n6TbbtPcEKVgljyTfwD5ymp+oMKfIYQC9JsN8mPADN5rjLFgC+xGceWLbcjoNsCJ7x2ZjyWRblSxoOU5qnzxEA3k3Bu+OkV+ZXcSbmgMWoQACg=</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><md:SPSSODescriptor AuthnRequestsSigned=\\\"true\\\" WantAssertionsSigned=\\\"true\\\" protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"><md:KeyDescriptor use=\\\"signing\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:KeyDescriptor use=\\\"encryption\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"http://2NMYzwXxeT.localhost:8080/uaa/saml/SingleLogout/alias/2NMYzwXxeT.cloudfoundry-saml-login\\\"/><md:SingleLogoutService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"http://2NMYzwXxeT.localhost:8080/uaa/saml/SingleLogout/alias/2NMYzwXxeT.cloudfoundry-saml-login\\\"/><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat><md:AssertionConsumerService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"http://2NMYzwXxeT.localhost:8080/uaa/saml/SSO/alias/2NMYzwXxeT.cloudfoundry-saml-login\\\" index=\\\"0\\\" isDefault=\\\"true\\\"/><md:AssertionConsumerService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact\\\" Location=\\\"http://2NMYzwXxeT.localhost:8080/uaa/saml/SSO/alias/2NMYzwXxeT.cloudfoundry-saml-login\\\" index=\\\"1\\\"/></md:SPSSODescriptor></md:EntityDescriptor>\",\"singleSignOnServiceIndex\":0,\"metadataTrustCheck\":true,\"skipSslValidation\":false,\"attributeMappings\":{\"given_name\":\"firstname\",\"family_name\":\"lastname\",\"phone_number\":\"phone\",\"email\":\"primary-email\"},\"enableIdpInitiatedSso\":true,\"staticCustomAttributes\":{\"organization-emails\":[\"[email protected]\",\"[email protected]\"],\"organization-name\":\"The Demo Org\"}}",
"id" : "000e56d7-a857-4a4b-8a86-4003e9e50059",
"entityId" : "2NMYzwXxeT.cloudfoundry-saml-login",
"name" : "2NMYzwXxeT",
"version" : 0,
"created" : 1594171389672,
"lastModified" : 1594171389672,
"active" : true,
"identityZoneId" : "uaa"
} ]
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing sps.read |
X-Identity-Zone-Id |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a zone_id. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Response Fields
Path | Type | Description |
---|---|---|
[].id |
String |
Unique identifier for this provider - GUID generated by the UAA. |
[].name |
String |
Human readable name for the SAML SP. |
[].entityId |
String |
The entity id of the SAML SP. |
[].active |
Boolean |
Defaults to true. |
[].created |
Number |
UAA sets this to the UTC creation date. |
[].identityZoneId |
String |
Set to the zone that this provider will be active in. Determined by either. |
[].lastModified |
Number |
UAA sets this to the UTC last date of modification. |
[].version |
Number |
Version of the identity provider data. Clients can use this. |
[].config |
String |
Contains metaDataLocation and metadataTrustCheck fields as json fields. |
[].config.metaDataLocation |
String |
The SAML SP Metadata - either an XML string or a URL that. |
[].config.metadataTrustCheck |
Boolean |
Determines whether UAA should validate the SAML SP metadata. |
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
Get
$ curl 'http://localhost/saml/service-providers/36229a77-fab2-4ec6-967c-132ff8df17df' -i -X GET \
-H 'Authorization: Bearer 8b16b64c2fb34620ae161aac59720a54'
GET /saml/service-providers/36229a77-fab2-4ec6-967c-132ff8df17df HTTP/1.1
Authorization: Bearer 8b16b64c2fb34620ae161aac59720a54
Host: localhost
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 7322
{
"config" : "{\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" ID=\\\"d5Zzy7zvGK.cloudfoundry-saml-login\\\" entityID=\\\"d5Zzy7zvGK.cloudfoundry-saml-login\\\"><ds:Signature xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/><ds:SignatureMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\\\"/><ds:Reference URI=\\\"#d5Zzy7zvGK.cloudfoundry-saml-login\\\"><ds:Transforms><ds:Transform Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\\\"/><ds:Transform Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/></ds:Transforms><ds:DigestMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#sha1\\\"/><ds:DigestValue>zALgjEFJ7jJSwn2AOBH5H8CX93U=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>Rp5XH8eT0ek/vlFGzHgIFOeESchOwSYZ9oh4JA9WqQ0jJtvNQ9IttY2QY9XK3n6TbbtPcEKVgljyTfwD5ymp+oMKfIYQC9JsN8mPADN5rjLFgC+xGceWLbcjoNsCJ7x2ZjyWRblSxoOU5qnzxEA3k3Bu+OkV+ZXcSbmgMWoQACg=</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><md:SPSSODescriptor AuthnRequestsSigned=\\\"true\\\" WantAssertionsSigned=\\\"true\\\" protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"><md:KeyDescriptor use=\\\"signing\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:KeyDescriptor use=\\\"encryption\\\"><ds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:X509Data><ds:X509Certificate>MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEOMAwGA1UECBMF\\nYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEOMAwGA1UECxMFYXJ1YmExDjAM\\nBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5hcnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2\\nMjdaFw0xNjExMTkyMjI2MjdaMHwxCzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UE\\nChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmEx\\nHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\\ngQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39WqS9u0hnA+O7MCA/KlrAR\\n4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCY\\nxhMol6ZnTbSsFW6VZjFMjQIDAQABo4HaMIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1sy\\nGDCBpwYDVR0jBIGfMIGcgBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3\\nMQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYDVQQL\\nEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyggEA\\nMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ0HOZbbHClXmGUjGs+GS+xC1FO/am\\n2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxCKdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3o\\nePe84k8jm3A7EvH5wi5hvCkKRpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"http://d5Zzy7zvGK.localhost:8080/uaa/saml/SingleLogout/alias/d5Zzy7zvGK.cloudfoundry-saml-login\\\"/><md:SingleLogoutService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"http://d5Zzy7zvGK.localhost:8080/uaa/saml/SingleLogout/alias/d5Zzy7zvGK.cloudfoundry-saml-login\\\"/><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat><md:AssertionConsumerService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\\\" Location=\\\"http://d5Zzy7zvGK.localhost:8080/uaa/saml/SSO/alias/d5Zzy7zvGK.cloudfoundry-saml-login\\\" index=\\\"0\\\" isDefault=\\\"true\\\"/><md:AssertionConsumerService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact\\\" Location=\\\"http://d5Zzy7zvGK.localhost:8080/uaa/saml/SSO/alias/d5Zzy7zvGK.cloudfoundry-saml-login\\\" index=\\\"1\\\"/></md:SPSSODescriptor></md:EntityDescriptor>\",\"singleSignOnServiceIndex\":0,\"metadataTrustCheck\":true,\"skipSslValidation\":false,\"attributeMappings\":{\"given_name\":\"firstname\",\"family_name\":\"lastname\",\"phone_number\":\"phone\",\"email\":\"primary-email\"},\"enableIdpInitiatedSso\":true,\"staticCustomAttributes\":{\"organization-emails\":[\"[email protected]\",\"[email protected]\"],\"organization-name\":\"The Demo Org\"}}",
"id" : "36229a77-fab2-4ec6-967c-132ff8df17df",
"entityId" : "d5Zzy7zvGK.cloudfoundry-saml-login",
"name" : "d5Zzy7zvGK",
"version" : 0,
"created" : 1594171389738,
"lastModified" : 1594171389738,
"active" : true,
"identityZoneId" : "uaa"
}
Request Headers
Name | Description |
---|---|
Authorization |
Bearer token containing sps.read |
X-Identity-Zone-Id |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a zone_id. |
X-Identity-Zone-Subdomain |
If using a zones.<zoneId>.admin scope/token, indicates what zone this request goes to by supplying a subdomain. |
Path Parameters
/saml/service-providers/{id}
Parameter | Description |
---|---|
id | Unique ID of the service provider |
Response Fields
Path | Type | Description |
---|---|---|
id |
String |
Unique identifier for this provider - GUID generated by the UAA. |
name |
String |
Human readable name for the SAML SP. |
entityId |
String |
The entity id of the SAML SP. |
active |
Boolean |
Defaults to true. |
created |
Number |
UAA sets this to the UTC creation date. |
identityZoneId |
String |
Set to the zone that this provider will be active in. Determined by either. |
lastModified |
Number |
UAA sets this to the UTC last date of modification. |
version |
Number |
Version of the identity provider data. Clients can use this. |
config |
String |
Contains metaDataLocation and metadataTrustCheck fields as json fields. |
config.metaDataLocation |
String |
The SAML SP Metadata - either an XML string or a URL that. |
config.metadataTrustCheck |
Boolean |
Determines whether UAA should validate the SAML SP metadata. |
config.attributeMappings.given_name |
String |
Map given_name value within UAA to a specified assertion in the SAML response. |
config.attributeMappings.family_name |
String |
Map family_name value within UAA to a specified assertion in the SAML response |
config.attributeMappings.phone_number |
String |
Map phone_number value within UAA to a specified assertion in the SAML response. |
config.attributeMappings.email |
String |
Map email value within UAA to a specified assertion in the SAML response. |
config.enableIdpInitiatedSso |
Boolean |
When set to true, default is false, the service provider supports IDP initiated SSO at the endpoint /saml/idp/initiate?sp=sp_entity_id |
config.staticCustomAttributes |
Object |
A map of static attributes that will be sent with every assertion. |
The key is the name of the attribute and the value is the attribute value. If the value is a list, multiple attribute values will be sent with the same named attribute.
Currently only xs:string
type values are supported.
Error Codes
Error Code | Description |
---|---|
403 | Forbidden - Insufficient scope |
Create
$ curl 'http://localhost/saml/service-providers' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer 6606fd400b124e18bea089a576cd3fc4' \
-d '{
"config" : "{\"metaDataLocation\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><md:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" ID=\\\"kKjvKrQKDK.cloudfoundry-saml-login\\\" entityID=\\\"kKjvKrQKDK.cloudfoundry-saml-login\\\"><ds:Signature xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\\\"http://www.w3.org/2001/10/xml-exc-c14n#\\\"/><ds:SignatureMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#rs