-
Notifications
You must be signed in to change notification settings - Fork 351
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
OIDC: Aggregated and Distributed Claims #1955
Comments
When I check the linked resource, there is: {
...
"_claim_names": {
"groups": "src1"
},
{
"_claim_sources": {
"src1": {
"endpoint":"[Url to get this user's group membership from]"
}
}
}
...
} I think if we somehow configure that lookup key is |
It as actually a well defined standard behaviour: Example implementation: or: https://github.com/grafana/grafana/blob/main/pkg/login/social/azuread_oauth.go#L167-L183 For other IdP we've seen with ADFS that case is not properly handled eventually causing browser or LB exceptions, no idea about others though. The Hashicorp example looks well implemented as a good base - what do you think @szuecs ? |
If it's part of the oidc standard then it seems potentially useful to implement to me. Interestingly both referenced example implementations look like they were able to be implemented using Although some nice libraries like https://github.com/manicminer/hamilton/ exist, it would not seem very nice to require that just to support this feature. |
If it's part of the spec let's build it of course! https://openid.net/specs/openid-connect-core-1_0.html#DistributedExample , 5.6.2.2 is in particular an interesting case. We need to query the sources, but this should be done in |
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. Base for discussion with open questions marked with Todo Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. Base for discussion with open questions marked with Todo Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ```
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: zalando#1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
fixes: #1955 This solution is scoped to Azure behaviour, taking into account the specs from https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims There are some Azure related API calls included but trying to support other providers, which is though unknown at this time. it transforms a distributed claim ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } } } ``` into a full populated token, which is saved in `statebag` and in the `cookie` for follow up processing ```json { "_claim_names": { "groups": "src1" }, "_claim_sources": { "src1": { "endpoint": "https://graph.windows.net/.../getMemberObjects" } }, "groups": [ "group1", "group2", ... ] } ``` Signed-off-by: Samuel Lang <gh@lang-sam.de>
Is your feature request related to a problem? Please describe.
For OIDC (using filter
oauthOidcAnyClaims
) with Azure AD we are seeing users who are member of many groups to run into a clipped groups token behaviour of Azure.The
groups
claim is replaced byhasToken
and a pointer to the Graph API.That breaks subsequent filter
oidcClaimsQuery
for group membership, as the expected claim of groups is emptyDescribe the solution you would like
Skipper detects this flag
hasToken
and performs a lookup to the Graph API, retrieving the actual list of groups, storing in the statebag or cookie.It could be a configurable option to perform this lookup.
Additional context (optional)
Would it make sense to implement this lookup to the Graph API,
granted this looks like a Azure-ish behaviour?Which filter would be the proper place to extend?
Would you like to work on it?
Potentially, with support.
The text was updated successfully, but these errors were encountered: