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

Clarification for JWT-only access #41

Merged
merged 6 commits into from
May 27, 2021

Conversation

davidbernick
Copy link
Collaborator

For issues brought up here, #40, we are trying to clarify that GA4GH explicitly supports JWT-only auth though it is not the most recommended way to use it.

For issues brought up here, #40, we are trying to clarify that GA4GH explicitly supports JWT-only auth though it is not the most recommended way to use it.
@davidbernick
Copy link
Collaborator Author

davidbernick commented Dec 1, 2020

Hi @mikael-linden and @martin-kuba -- this is a small PR for clarification mostly. The idea is that if /userinfo is returned as a JWT, a closely knit group of Clearinghouses may pass it amongst themselves. For instance, Institution A and B have explicit legal and security agreements (known as ISAs) that bind their systems contractually. For that use-case, using the JWT itself as an authentication mechanism should be acceptable. In other words, allowing trust between systems (if they accept risk) WITHOUT a full OIDC Flow. What IS implied is that somewhere within one of these two systems, explicit OIDC Flow happened to get the information in the first place.

This was always implied by the spec but I put this in to make it more explicit.

@davidbernick davidbernick changed the title First pass at fixing JWT-only access Clarification for JWT-only access Dec 1, 2020
@davidbernick
Copy link
Collaborator Author

@mikael-linden @cdvoisin is there more that's required here?

@cdvoisin
Copy link
Collaborator

I'm not sure NIH and ecosystem genomics platforms will be needing this anymore. I'd prefer not to have to worry about the implications of using a flow like this if other options can solve the need. Perhaps we can sit on this or reject it for now and reopen in the future if we need it?

@davidbernick
Copy link
Collaborator Author

I'm not sure NIH and ecosystem genomics platforms will be needing this anymore. I'd prefer not to have to worry about the implications of using a flow like this if other options can solve the need.

I think we need it because the “interconnected” systems like terra->gen3 or terra->7 bridges want to do something like this with RAS (one system talks to RAS and Gets VISAs and can use a Passport JWT to authenticate/authorize to another system).

it’s not urgent because we said it’s an acceptable use case and showed this PR as evidence to that. Remember this is the PR that you and I worked on together...

@mikael-linden
Copy link
Contributor

I understood the idea is a Clearinghouse has a local agreement that it can pass the Userinfo response JWT to a downstream party. Is defining that kind of flow in the scope of the AAI OIDC profile? In general, the profile defines the flow between the Broker and the Clearinghouse.

@davidbernick
Copy link
Collaborator Author

davidbernick commented Jan 25, 2021 via email

@mikael-linden
Copy link
Contributor

we've gotten many questions of, "Can the output of /userinfo be used for authentication?" and if so "Can we dictate the format of that /userinfo?". Because the spec doesn't say one way or another, actual groups implementing were confused over what it SHOULD be. So I figured making that clearer was good.

Would a separate FAQ be better than including implementation hints or good practices to the normative spec itself? I'm worried about the specification bloat.
Also the current proposed text is a bit cryptic -- I had to read it together with your comment above to understand it.

@cdvoisin
Copy link
Collaborator

When I added signed JWT responses in the v1.0 AAI spec, I was thinking about use cases where reverse proxies and more complicated layers of infrastructure may want to have a way to retain the broker's authority in the response. When it comes to using a /userinfo as an access token, there are several areas that we would need to tighten up when it comes to security assumptions and compatibility (when it is only to use use these as access tokens and when not to). This adds bloat as Mikael has indicated, and can make the spec harder to implement from all layers of participants in the federation.

Instead of moving toward this backdoor process to get scoped tokens, there are several other mechanisms that are closer to standard (or straight out of the spec) to achieve the same result without needing to overload /userinfo. These are currently being explored by FASP, such as standard and custom token exchange, and scoped-down tokens that may return the visa claims directly.

I'd suggest we better understand the limitations of these other standard approaches, perhaps with modest "OIDC discoverable" extensions if the need warrants it, before proceeding with anything as foreign as overloading /userinfo to produce access tokens. Overloading /userinfo is not the direction additional specs are moving that build on the original OIDC and OAuth 2.0 specs to handle specialized tokens.

@davidbernick
Copy link
Collaborator Author

Ok -- this is a good discussion. Because this WAS discussed for several "real world" reasons, we can leave it as is, and instead I'll make an FAQ or "use-case" section that will be supplanted when we (presumably) offer a /token endpoint that makes this moot.

The issue came up for systems that are not coupled but have agreements in place and if one system's /userinfo spits out a JWT, can that JWT be used on a ClearingHouse as authentication. My take (and intention in the spec) is "yes". I wanted to make that clear. Since a "JWT-as-authentication" is outside of a normal OIDC flow, this caused confusion.

@davidbernick
Copy link
Collaborator Author

ok @cdvoisin and @mikael-linden -- I took your (very good) advice and made this clarification in the (new) appendix section and took it out of the spec. This way we can continue development of key systems like RAS and have their concerns answered while not cluttering the spec. Let me know what you think conceptually -- we can nitpick later.

@mikael-linden
Copy link
Contributor

I'm materially happy with the change but I don't think it is practical to make FAQ an appendix of the spec. FAQs should be quite lightweight and easy to update but specs harder.

@davidbernick
Copy link
Collaborator Author

Sounds good @mikael-linden -- I'll make it a separate doc as a FAQ as opposed to the Spec --

Request opinion here: should i even reference the FAQ from the spec or not acknowledge it?

@mikael-linden
Copy link
Contributor

I don't think a spec need a "Look the FAQ for more information" boilerplate but the FAQ needs to be easy to find.

@davidbernick
Copy link
Collaborator Author

ok @mikael-linden and @cdvoisin -- I moved this info to a FAQ, provided a diagram. I think this will be good for the clarification we keep getting asked about in the field.

@davidbernick davidbernick merged commit 5453b4c into master May 27, 2021
@davidbernick davidbernick deleted the bernick_JWT_Only_Clarification branch May 27, 2021 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants