Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

identity/oidc: allow filtering the list providers response by an allowed_client_id #16181

Merged
merged 4 commits into from
Jul 28, 2022

Conversation

austingebauer
Copy link
Member

@austingebauer austingebauer commented Jun 29, 2022

Overview

This PR allows filtering the list providers response by an allowed_client_id value. The list of providers returned will be those that allow the given client ID in their allowed_client_ids field. This is useful for a UI workflow where suggesting an issuer to use along with client application creation.

Example:

$ curl -H "X-Vault-Token: ..." -X LIST http://127.0.0.1:8200/v1/identity/oidc/provider?allowed_client_id="<client_id>"

Testing

I've added tests to this PR which exercise the list filtering capability.

@@ -178,6 +178,8 @@ func buildLogicalRequestNoAuth(perfStandby bool, w http.ResponseWriter, r *http.
path += "/"
}

data = parseQuery(r.URL.Query())
Copy link
Member Author

@austingebauer austingebauer Jun 29, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This passes the query parameters to backends for LIST operations. I don't see why we couldn't do this, but perhaps there is some context I'm missing 🤔

If we don't want to allow query parameters for LIST operations, I'm okay changing this to use a GET.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technically the "GET" verb can also translate to a logical.ListOperation, but that case omits parsing and passing in the rest of the query parameters into the logical.Request.Data.

Should we also consider how to handle query params there if we make it available here? Would there be any backwards compatibility concerns if so?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, that's a good callout. I can't think of any compatibility concerns. The "GET" with ?list=true would result in a ListOperation handler being called, and it would be up to that handler implementation to parse data from query parameters. I don't think any ListOperation handlers are parsing parameters today, so I can't think of a concern.

That said, I'm okay with just allowing query parameters for "LIST" at this point. It's a small change, and it makes sense to use query parameters to filter lists. If users want consistent behavior with the GET-style list, we can always address it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see the value in keeping the behavior of GET with ?list=true and LIST the same in regards to query params. But I agree that it is a small change and we could wait to see if users want this available for GET ?list=true.

@austingebauer austingebauer requested a review from a team June 29, 2022 01:58
@@ -178,6 +178,8 @@ func buildLogicalRequestNoAuth(perfStandby bool, w http.ResponseWriter, r *http.
path += "/"
}

data = parseQuery(r.URL.Query())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technically the "GET" verb can also translate to a logical.ListOperation, but that case omits parsing and passing in the rest of the query parameters into the logical.Request.Data.

Should we also consider how to handle query params there if we make it available here? Would there be any backwards compatibility concerns if so?

vault/identity_store_oidc_provider.go Show resolved Hide resolved
@calvn calvn requested a review from a team June 30, 2022 00:43
Copy link
Contributor

@fairclothjm fairclothjm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM just one question on the unit tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants