Configure IBM Verify for agent IAM
Enterprise
Appropriate Vault Enterprise license or HCP Vault Dedicated cluster required.
Configure users and OIDC applications in IBM Verify to use with Vault Enterprise agentic IAM.
Before you start
You must have an IBM Verify tenant. If you do not have a tenant, you can sign up for a free trial to evaluate the integration process.
You must the
oauth2cCLI. You needoauth2cinstalled and in your systemPATHto interact with OAuth 2.0 authorization servers.You must have
curlor some other tool to make API calls.You must have
jqinstalled to use the example commands as written.
Step 1: Create users in Verify
You need to create accounts for the human user and agent user in Verify and note their user IDs.
Access your Verify tenant as an admin user.
Create and configure a user account for the human user that will use the AI agent or application.
- Click Directory in the navigation menu.
- Click Users & groups.
- Click Add user.
- Select and identity provider, such as IBMid or your preferred provideer.
- In the User name field, enter a username value.
- In the Preferred e-mail field, enter a valid email address.
- Click Save.
Find and note the user ID:
- Click Directory.
- Click Users & groups.
- For the user you just created, click the User details icon.
- The user ID appears on the user profile page. You need this user ID value to later configure the external ID in the Vault entity alias.

Repeat the process to creat a user account for the agent or other AI application that will act on behalf of a human user and note the agent user ID.
Step 2: Create an OIDC application in Verify
Configure a public or a confidential client OIDC application that issues JWT access tokens for the user and the agent or AI application that performs operations on behalf of the user.
Access your Verify tenant as an admin user.
In the navigation menu, click Applications → Applications.
Click Add an application.
For appplication type, click OpenID Connect.

Click Add Application.
Under OpenID Connect enter a name for the application. For example,
hashicups-print-service.Update the Description field as necessary.
For Company name, enter the required value.
Click Add owner to assign an admin user as the owner of this application.
Enter an admin username in the search field.
Click an admin user to highlight it.
Click OK to assign the admin user to this application.
Step 3: Configure sign-on for the application

Click Sign-on to configure the application sign on settings.
In the Application URL field, enter the main URL or home page of the app to add as the resource server. The application URL is the entry point of the user to interact with the application. You can configure the application URL to be appropriate for your AI application UI or chat interface.
Enable the necessary grant types. Browser driven flows use the Authorization code grant, and the resource server needs Client Credentials to authenticate with the authorization server to exchange the code for the security token.
For Grant types, click and enable the following:
- Authorization code.
- Client credentials.
- Resource owner password credentials (ROPC)
For Response types click the response of the Authorization server when the user authenticates. Click the check box for code to use an Authz Code Grant flow.
For Response modes uncheck every mode except for query.
Ensure that Public client (no client secret) is unchecked to enforce a private client application.

In the Redirect URIs field, enter a valid URI for the authorization server redirect to the URL containing the code as a query parameter.
Under Token settings > Access token format, select JWT.
Click the Generate refresh token checkbox.

Click Save to save the application settings.
After saving the application, you arrive at the Entitelments tab where you must click the Automatic access for all users and groups radio button to enable access.
Click Save to save the application settings.
When prompted to update the workflow, click OK.
Step 4: Configure an "on behalf of" relationship
Configure the on behalf of (OBO) relationship between the user/subject and the
agent or AI application. You must configure the act and may_act claims in
the configured OIDC application introspection endpoints.
Click Applications → Applications.
Click the gear icon next to your application name to open settings.
Click Sign-on.
Scroll down to Client ID and copy the value. Note and save the Client ID for configuring custom request rules later.

Scroll down to Endpoint configuration.
Next to the Introspect settings, click the edit icon that resembles a pencil.

Click the arrow next to Add attribute.
Click Add custom rule.
Within the Request rule text area, enter the following JSON which uses the client ID of then OIDC application. Paste the client ID value you just copied to replace the "CLIENT_ID" placeholder text.
{"client_id":"CLIENT_ID"}Click OK.
Map the custom rule to the Target attribute
may_act.
Click OK.
Scroll down to Custom scopes and API access.
Prevent the client from requesting unknown scopes by checking Restrict custom scopes.
Add
emailto a custom scope.Add
openidto a custom scope.Add
profileto a custom scope.Click Save.
Step 5: Configure API client access
Configure a new API client for the IBM Verify tenant for API access:
In the navigation menu, click Security.
Click Add API client.
Click the checkbox for each client access entitlement that your agent or AI application use case requires.
Click Next.
The client ID gets automatically generated. Choose the client authentication method your use case requires or leave at Default.
Click Next.
Leave the custom scopes which the client can request unchanged unless your use case requires changing them.
Click Next.
Leave the IP filtering setting unchanged unless you need to filter them client API access by IP address or CIDR.
Click Next.
If your use case requires additional properties, enter their names and values. The screenshot show just an example value. Use your actual values.
click Next.
In the Name field, enter a machine friendly name like
hashicups-print-agent. Add a description and any tags as well.Click Create API client.
For more detailed configuration options, refer to the Verify API documenation.
Step 6: Create authorization detail type in Verify
You need to create an authorization details schema to define how information gets structured, validated, and presented for consent during authentication flows.
Click Applications.
Click Authorization detail types.
Click Create.
Under General details, select the Custom radio button.
In the Name field, define a name for this authorization detail type, enter the string
vault:path_access.In the Description field, enter a description for the type.

In the Schema text area, paste the JSON schema defining the
authorization_detailsquery parameter:{ "type": "object", "required": [ "type", "path", "capabilities" ], "additionalProperties": false, "properties": { "type": { "const": "vault:path_access" }, "path": { "type": "string", "pattern": "^[A-Za-z0-9._/:-]+$" }, "capabilities": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "read", "create", "update", "delete", "sudo", "list", "deny" ] } } } }Leave Consent mapping settings unchanged, and click Next.
For Consent configuration method, select Inline HTML.
For Consent text, enter
<div>EXAMPLE CONSENT TEXT</div>.Click Create.
Step 7: Configure the secure token service client
Configure a security token service (STS) client for performing token exchange.
This STS client performs both the token exchange representing OBO semantics,
and the addition of an authorization_details Rich Authorization Requests
(RAR) claim.
Click Applications.
Click STS clients.
Click Add STS client.
Configure the general, authentication, token, proof-of-possession, and endpoint settings.
Leave the client authentication method at Default.
Click Next.
Define your custom scopes and API access:
Unless you need to relax any settings, you can leave everything except for Authorization detail types unchanged.
For Authorization detail types, select vault:path_access.
Check the box for all the user permissions your use case requires.
Click Next.
Click Complete setup. You do not neeed to apply an access policy.
Step 7: Validate token retrieval
Use your application client ID and client secret values with the ouauth2c tool
to get a token from Verify as a validation step.
Get your application details:
Click Applications > Applications.
Click the gear icon next to your application name to open settings.
Click Sign-on.
Scroll down to Client ID and copy the value; paste the value somewhere safe to use later.
Click the copy to clipboard icon next to Client secret and then paste the value somewhere safe to use later.
Open a new terminal.
Export your Verify tenant name, client ID, and secret as environment variables:
$ export IBM_VERIFY_TENANT=`<tenant name>` \ IBM_VERIFY_CLIENT_ID=`<client ID generated from previous step>` \ IBM_VERIFY_CLIENT_SECRET=`<client secret generated from previous step>`Request an example token with the oauth2c command-line tool.
$ oauth2c https://"${IBM_VERIFY_TENANT}".verify.ibm.com/oauth2 \ --pkce \ --client-id "${IBM_VERIFY_CLIENT_ID}" \ --client-secret "${IBM_VERIFY_CLIENT_SECRET}" \ --response-types code \ --response-mode query \ --grant-type authorization_code \ --auth-method client_secret_basic --no-browserNote the URL under
Go to the following URL:in the output. Visit that URL in a browser to complete the authentication flow. The workflow then outputs more indicators of success....snip... SUCCESS Obtained authorization code ...snip... SUCCESS Exchanged authorization code for access token
The final output string after the SUCCESS messages represents the JWT value, which validates both the workflow and token issuance from Verify.
Step 8: Validate token exchange
You can also exchange the AI agent (actor) and human user (subject) tokens with
RAR authorization_detail claims with a similar workflow by providing token
values from tokens issued for both the AI agent and the human.
Export the AI agent token value as the AGENT_TOKEN environment variable.
$ export AGENT_TOKEN=...Export the human user token value as the HUMAN_TOKEN environment variable.
$ export HUMAN_TOKEN=...Export the DELEGATION_TOKEN environment variable to hold the output of the token exchange.
$ export DELEGATION_TOKEN=$(curl --request POST \ --url https://vv-agentic-iam-demo.ite4.idng.ibmcloudsecurity.com/oauth2/token \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data grant_type=urn:ietf:params:oauth:grant-type:token-exchange \ --data subject_token="${HUMAN_TOKEN}" \ --data subject_token_type=urn:ietf:params:oauth:token-type:access_token \ --data actor_token="${AGENT_TOKEN}" \ --data actor_token_type=urn:ietf:params:oauth:token-type:access_token \ --data client_id="${IBM_VERIFY_CLIENT_ID}" \ --data client_secret="${IBM_VERIFY_CLIENT_SECRET}" \ --data 'authorization_details=[{"type":"vault:path_access","path":"secret-v2/data/shared-secret/foo", "capabilities":["create"]}]' | jq -r '.access_token)
Next steps
Now that you have your user IDs (human and aget) and OBO authorization details, you can configure Vault Enterprise to use IBM Verify as an identity provider for AI agents.
Vault requires the following information for setup:
| Variable | Purpose |
|---|---|
DELEGATED_JWT | The OBO with authorization details JWT as obtained after token exchange via the STS client. |
ISSUER | The issuer retrieved from the Well known Open ID configuration of the JWT issuer. |
SUBJECT_EXT_ID | User ID of the subject user from your IdP application |
ACTOR_EXT_ID | User ID of the actor user from your IdP application |

