-
Notifications
You must be signed in to change notification settings - Fork 34
Generate an API token using LDAP
This example shows how to use the Tyk API Gateway and Identity Broker to allow users to access an API using an LDAP-based identity provider. This uses an OpenLDAP, but you should be able to use an LDAP compatible provider, such as Active Directory.
For this example we are using a Docker-based installation:
- Gateway 2.7.4
- Dashboard 1.7.3
- Identity Broker 0.3
- OpenLDAP docker container
The application configuration should be set up as standard. See configuring Tyk Identity Broker.
This assumes you have a good understanding of the Tyk products already and just need guidance on the Identity Broker profile configuration.
The Identity Provider's profile.json file configures how it will process authentication requests. Add this profile to it, but update the values based on your Tyk and LDAP installations:
{
"ActionType": "GenerateTemporaryAuthToken",
"ID": "ldap",
"IdentityHandlerConfig": {
"DashboardCredential": "756fb086d5fe461364944921d00f36ae",
"TokenAuth": {
"BaseAPIID": "9d53858fdaa94f5e6bdf222cfb5085f3"
}
},
"MatchedPolicyID": "5c6659e073beb1000115473c",
"OrgID": "5c652b6b73beb10001154739",
"ProviderConfig": {
"FailureRedirect": "http://example.com/failure",
"LDAPAttributes": [],
"LDAPPort": "389",
"LDAPServer": "openldap",
"LDAPUserDN": "cn=*USERNAME*,dc=my-company,dc=com"
},
"ProviderName": "ADProvider",
"ReturnURL": "",
"Type": "redirect"
}
-
ActionType: Instructs the Identity Broker on what action to perform if the user authentication is successful. In this case we useGenerateTemporaryAuthTokenas we want to generate an API token. -
ID: Profile Id which will be used when accessing the Identity Broker endpoint. Must be unique inprofiles.json. -
IdentityHandlerConfig.DashboardCredential: Tyk Dashboard API Access Credentials of the Dashboard user. Must be in the same Organisation as the API referenced byIdentityHandlerConfig.OAuth.BaseAPIID. -
IdentityHandlerConfig.TokenAuth.BaseAPIID: Id of the API. -
MatchedPolicyID: Policy Id of the policy which grants access to the API. -
OrgID: Organisation Id of the user referenced byIdentityHandlerConfig.DashboardCredential. -
ProviderConfig.FailureRedirect: URL to redirect to if the LDAP authentication fails. -
ProviderConfig.LDAPAttributes: Attributes used as part of the LDAP search request. -
ProviderConfig.LDAPPort: Port on which Identity Broker can connect to the LDAP server. -
ProviderConfig.LDAPServer: Hostname on which Identity Broker can connect to the LDAP server. -
ProviderConfig.LDAPUserDN: The 'Distinguished Name' of the user the Identity Broker will attempt to authenticate. It must include the value*USERNAME*, which acts as a token which the Identity Broker will replace with the username it receives in the request. -
ProviderName: Specifies the provider type the Identity Broker will use, in this caseADProvider.
For this example we are using a Docker container to provide an LDAP server: https://hub.docker.com/r/mwaeckerlin/openldap/.
I added the container to my host as so:
docker run -d --name openldap --network tyk_network -p 389:389 \
-e DEBUG_LEVEL=1 \
-e DOMAIN=my-company.com \
-e ORGANIZATION="My Company" \
-e PASSWORD=1234567890 \
mwaeckerlin/openldap
This exposes the container on port 389 on the hostname openldap and joins the container to the tyk_network network so that it can connect to the other Tyk components. It also creates a basic admin user with the password 1234567890.
Note: Once you have saved your Identity Broker profile, make sure to restart the Identity Broker before testing the solution. This will allow the new profile configuration to be loaded.
To generate an API token using LDAP, call the Identity Broker API e.g.
curl POST \
http://localhost:3010/auth/ldap/user \
-d 'username=admin&password=1234567890'
-
POST: We need toPOSTthe user credentials. -
http://localhost:3010/auth/ldap/user: URL for the Identity Broker. In this example I am running a local Docker container so can uselocalhost:3010. The path contains three elements:-
auth: Endpoint for Identity Broker authentication API calls. -
ldap:IDof the Identity Broker profile. -
user: This element isn't actually user by the LDAP provider, but we still need to provide some value.
-
-
-d 'username=admin&password=1234567890': The username and password provided as anx-www-form-encodedvalue. Here we are providing usernameadminand password1234567890.
This request be trigger the Identity Broker to connect to the LDAP server and verify the credentials.
If the request is successful, an API key will be generated and it will be returned in the response:
{
"key_id": "5c652b6b73beb10001154739f8185d5f9be148e9a2173c24acbc6c71"
}
If the request is not successful, the Identity Broker will redirect the request to the URL provided in the profile's ProviderConfig.FailureRedirect.
The API key can then be used to make API requests.