Hello,
I am trying to use Vault as a OIDC Provider to fetch access_token.
My use case,
I have React App where user will be able to update their secrets (Ex. path “test-secret/Account.json”)
To fetch the access_token I am using Vault as a OIDC provider,
Steps:
- React App Login page will redirect user to Vault
- Using Vault userpass auth method, user will authenticate himself
- Vault will redirect them to React App with
code
- React App will call OIDC Token API to fetch
token
- React App will update secret using Secret Engine API and
access_token
I have followed OIDC Provider docs(Vault as an OIDC identity provider | Vault | HashiCorp Developer). Not Setup Boundary
Created a new Policy
path "test-jira-secrets/*" {
capabilities = ["create", "update", "patch", "read", "delete", "list"]
}
path "sys/mounts" {
capabilities = ["read", "list"]
}
# Mount the OIDC auth method
path "sys/auth/oidc" {
capabilities = [ "create", "read", "update", "delete", "sudo" ]
}
# Configure the OIDC auth method
path "auth/oidc/*" {
capabilities = [ "create", "read", "update", "delete", "list" ]
}
# Write ACL policies
path "sys/policies/acl/*" {
capabilities = [ "create", "read", "update", "delete", "list" ]
}
# List available secrets engines to retrieve accessor ID
path "sys/mounts" {
capabilities = [ "read" ]
}
Created a new user with above policy
Authentication working and I am getting access_token
{
"access_token": "hvb.AAAAAQK8kNhe1ykh_h1aFAAZi5LRdOdndl5Zx5HzQH5RimUQLgrUuveIi1iSX9DDzS1rk5ZzvP05DJTfMFK_kA7AzN0igqiLIfBAYCJKsfaVmpvo3RMzieesW5VuAjHA12374JNUoOjRqMM3WE7P8NjAqb_AL5razIRFIidS2Jr3RaNYFZXuyJbFhomcecEgitFyNfcKIrk2l8ZFxgzzfrLrBrH6Z55rX2NUBuh6BZMEVTEro6Y3eU60oR2PMhJFsAjrfGsfNgmllmo5tTdjrz3IxtwJrDkb70atA2Wc8bmU4Vk-Hz-xsdwodNz7dIa6O7MNz85xSoAZ9lmB7E3ft7sS9izBkfdXinVBGSMRnwj6H43f_qWS4nxRShbXrqNu0vii1tMkSS0nEcfa6q8rRKdxBHArEVaeqSf9P0_TV9YnmdfYdteDhCzlmdeunNqOupg0C4erX-c",
"expires_in": 86400,
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjlmOGRiZDFiLTkyZWUtN2ZlNS04ZjEzLTRmNTdjNjU2ZWI0MSJ9.eyJhdF9oYXNoIjoielhCb0U5NTZBWS1QYUo3WU5CbkU2dyIsImF1ZCI6Im9wQ3Jjb0ozUkxPeGFQallNUlVGU0hWVU9hejJJQWV2IiwiY19oYXNoIjoiOC1nM1FkRk9TOWRubHJMRFV1TXdDUSIsImNvbnRhY3QiOnsiZW1haWwiOiIiLCJwaG9uZV9udW1iZXIiOiIifSwiZXhwIjoxNjkyODcwNzkyLCJncm91cHMiOm51bGwsImlhdCI6MTY5Mjc4NDM5MiwiaXNzIjoiaHR0cDovLzAuMC4wLjA6ODIwMC92MS9pZGVudGl0eS9vaWRjL3Byb3ZpZGVyL2RlZmF1bHQiLCJuYW1lc3BhY2UiOiJyb290Iiwibm9uY2UiOiJhYmNkZWZnaGlqayIsInN1YiI6ImMzOTRhNDUxLWRiZWMtZTk3Yi1kMTQzLTM5MWQwYjZmMzk1NSIsInVzZXJuYW1lIjoiVGVzdCBVc2VyIn0.tdWrMN8fjPJA0NNfU5_dUo-xs6tOWWJG6_i5zM1eJjM1BLSDwyB9c1kfP93ETcDPYcI1EAAq7HDDz-O_k3msiTxXirzK9A4QW-tj9wWJduuKaPdZvTuKUoOAwz-7lcv-2-KqGATKWhodJhlpsMKhB3aIP1DXLTaScP5s2jAnPssvm6DKaSEinhuqR7FNzUdSmxbh4R6p021bezvqIvyPXMta0xSLSHW3nEziSiXt0nxHNKQL5NMWEgd7TsZCwaXItZqVjUrLilCjmbSeFy2V-mu7HRguyOR0B3Hj17IIzkJ3vK8_IY1F_1ju3Fpwr7PPzceOC6GUCgiraEJm0o2Uzg",
"token_type": "Bearer"
}
Now, The issue I am facing is that,
Using this access_token, I am not able to fetch KV Secret Engine secrets
API:
curl --request GET \
--url 'http://localhost:8200/v1/test-jira-secrets/data/Account.json?version=1' \
--header 'Authorization: Bearer hvb.AAAAAQK8kNhe1ykh_h1aFAAZi5LRdOdndl5Zx5HzQH5RimUQLgrUuveIi1iSX9DDzS1rk5ZzvP05DJTfMFK_kA7AzN0igqiLIfBAYCJKsfaVmpvo3RMzieesW5VuAjHA12374JNUoOjRqMM3WE7P8NjAqb_AL5razIRFIidS2Jr3RaNYFZXuyJbFhomcecEgitFyNfcKIrk2l8ZFxgzzfrLrBrH6Z55rX2NUBuh6BZMEVTEro6Y3eU60oR2PMhJFsAjrfGsfNgmllmo5tTdjrz3IxtwJrDkb70atA2Wc8bmU4Vk-Hz-xsdwodNz7dIa6O7MNz85xSoAZ9lmB7E3ft7sS9izBkfdXinVBGSMRnwj6H43f_qWS4nxRShbXrqNu0vii1tMkSS0nEcfa6q8rRKdxBHArEVaeqSf9P0_TV9YnmdfYdteDhCzlmdeunNqOupg0C4erX-c'
Response:
{
"errors": [
"1 error occurred:\n\t* permission denied\n\n"
]
}
I think my config is wrong somewhere as
I have tried token_lookup
API:
API:
curl --request POST \
--url http://127.0.0.1:8200/v1/auth/token/lookup \
--header 'Content-Type: application/json' \
--header 'X-Vault-Token: hvs.U67nCqYxyehzoe8MtnkPigWO' \
--data '{
"token": "hvb.AAAAAQK8kNhe1ykh_h1aFAAZi5LRdOdndl5Zx5HzQH5RimUQLgrUuveIi1iSX9DDzS1rk5ZzvP05DJTfMFK_kA7AzN0igqiLIfBAYCJKsfaVmpvo3RMzieesW5VuAjHA12374JNUoOjRqMM3WE7P8NjAqb_AL5razIRFIidS2Jr3RaNYFZXuyJbFhomcecEgitFyNfcKIrk2l8ZFxgzzfrLrBrH6Z55rX2NUBuh6BZMEVTEro6Y3eU60oR2PMhJFsAjrfGsfNgmllmo5tTdjrz3IxtwJrDkb70atA2Wc8bmU4Vk-Hz-xsdwodNz7dIa6O7MNz85xSoAZ9lmB7E3ft7sS9izBkfdXinVBGSMRnwj6H43f_qWS4nxRShbXrqNu0vii1tMkSS0nEcfa6q8rRKdxBHArEVaeqSf9P0_TV9YnmdfYdteDhCzlmdeunNqOupg0C4erX-c"
}'
Response:
{
"request_id": "4f04d07e-3763-8bfa-1edf-d8dd72240453",
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": {
"accessor": "",
"creation_time": 1692784392,
"creation_ttl": 86400,
"display_name": "",
"entity_id": "c394a451-dbec-e97b-d143-391d0b6f3955",
"expire_time": "2023-08-24T09:53:12Z",
"explicit_max_ttl": 0,
"id": "hvb.AAAAAQK8kNhe1ykh_h1aFAAZi5LRdOdndl5Zx5HzQH5RimUQLgrUuveIi1iSX9DDzS1rk5ZzvP05DJTfMFK_kA7AzN0igqiLIfBAYCJKsfaVmpvo3RMzieesW5VuAjHA12374JNUoOjRqMM3WE7P8NjAqb_AL5razIRFIidS2Jr3RaNYFZXuyJbFhomcecEgitFyNfcKIrk2l8ZFxgzzfrLrBrH6Z55rX2NUBuh6BZMEVTEro6Y3eU60oR2PMhJFsAjrfGsfNgmllmo5tTdjrz3IxtwJrDkb70atA2Wc8bmU4Vk-Hz-xsdwodNz7dIa6O7MNz85xSoAZ9lmB7E3ft7sS9izBkfdXinVBGSMRnwj6H43f_qWS4nxRShbXrqNu0vii1tMkSS0nEcfa6q8rRKdxBHArEVaeqSf9P0_TV9YnmdfYdteDhCzlmdeunNqOupg0C4erX-c",
"issue_time": "2023-08-23T09:53:12Z",
"meta": {
"oidc_token_type": "access token"
},
"num_uses": 0,
"orphan": true,
"path": "oidc/provider/default/token",
"policies": null,
"renewable": false,
"ttl": 82238,
"type": "batch"
},
"wrap_info": null,
"warnings": null,
"auth": null
}
As you see the access_token
does not have any policy, but User and Entity both has default and test-jira-secrets policy attached to it.
So, If anyone has idea about it then please help.