Skip to content

Added jwt bearer token auth to MedplumClient #2408

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

Merged
merged 3 commits into from
Jul 11, 2023

Conversation

codyebberson
Copy link
Member

@codyebberson codyebberson commented Jul 8, 2023

  1. Added support for urn:ietf:params:oauth:grant-type:jwt-bearer
  2. Added a isMedplumAccessToken helper to determine if using MedplumClient with a Medplum server vs generic FHIR server
  3. Only do special Medplum stuff (lookup profile, access policies, etc) if using a Medplum server

This is in service of accessing the Health Gorilla FHIR API using MedplumClient, although it would apply to any FHIR server that requires "client assertion" JWT bearer tokens.

@codyebberson codyebberson requested a review from a team as a code owner July 8, 2023 22:04
@vercel
Copy link

vercel bot commented Jul 8, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
medplum-storybook ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 11, 2023 5:22pm
medplum-www ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 11, 2023 5:22pm

@@ -140,7 +140,7 @@ describe('Client', () => {
window.localStorage.setItem(
Copy link
Member

Choose a reason for hiding this comment

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

is JWT appropriate for client? I thought not - but perhaps I'm missing something.

Copy link
Member Author

Choose a reason for hiding this comment

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

Hm, perhaps some naming confusion.

"JWT" - a format of access token, which includes a set of "claims" signed by the server

Medplum uses JWTs for access tokens, even when you're signing in with email/password or google auth or whatever

"JWT bearer grant type" - a special OAuth flow where the client signs their own JWT using the preconfigured client ID and client secret.

@coveralls
Copy link

coveralls commented Jul 8, 2023

Coverage Status

coverage: 94.28% (+0.01%) from 94.27% when pulling 2d747da on cody-jwt-bearer-token-auth into 2100040 on main.

@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

100.0% 100.0% Coverage
0.0% 0.0% Duplication

Merged via the queue into main with commit 84195e8 Jul 11, 2023
@codyebberson codyebberson deleted the cody-jwt-bearer-token-auth branch July 11, 2023 22:33
codyebberson added a commit that referenced this pull request Jul 13, 2023
Use eslint-config in examples (#2456)
Add bundle to resource array in MedplumClient (#2445)
Add server config for logLevel (#2437)
Allow `/email` path in CORS (#2455)
Add clientId as optional prop to RegisterForm (#2452)
Instructions on setting up new patient registration (#2453)
Enable sourcemaps in server docker image (#2449)
Automatically restart redis docker container on local dev (#2446)
Fixes #2439 - clarify node 18+ required (#2442)
Fix json bug in access controls docs (#2440)
Use user repo in project admin tools (#2435)
Preliminary article on auth integration patterns (#2422)
Move medplum-demo-bots to /examples (#2403)
Fixes #2431 - handle client_id in /auth/newuser (#2434)
Fix localStorage infinite loop bug (#2436)
Change SearchControl to default to accurate (#2432)
Updated title (#2433)
Add DocumentReference resource type to ServiceRequest timeline (#2428)
Added jwt bearer token auth to MedplumClient (#2408)
Update packages/core/src/typeschema/validation.test.ts (#2430)
Create sweep.yaml config file (#2427)
Update bot-basics.md (#2424)
Adding tests to confirm hidden fields behavior (#2425)
Fix validation log condition (#2421)
Clarify Mutations documentaiton (#2417)
Constraint validation  (#2321)
Document basic functionality of the Medplum App (#2405)
Fix code complexity warning in search param details (#2415)
Ignore graphiql in sonar analysis (#2414)
Fixed more sonar warnings (#2416)
Validate Medplum resource profiles (#2404)
Update manual mock to use aws-sdk-client-mock (#2407)
Fix sonar code smells (#2413)
Update packages/app/src/HomePage.tsx (#2412)
Update packages/app/src/FormPage.tsx (#2411)
Updating broken links found during demo (#2391)
Fixes #2396 - block reset password with external auth (#2399)
Added docs on $resend operation (#2394)
Updated homepage (#2243)
Add `~` to SearchControl count to indicate estimated counts (#2380)
Add Environment Variable Config Support (#2378)
Add merge group CI triggers (#2393)
Fixes regression in string array filters (#2392)
Perf improvement to getTypedPropertyValue (#2389)
Fix merge conflict in validation test (#2390)
Cut over to new validation logic (#2382)
Add test for profile walking into base type schema (#2388)
Adding documentation and examples for CLI optional params to connect to other fhir servers (#2303)
Update client-sesv2 manual mock to use aws-sdk-client-mock (#2381)
#1314 Add an API Collection for Postman, as well as an env template a… (#2325)
Document `_total` search param (#2379)
Fixes #2374 - updated jest babel config (#2375)
Implement slice validation (#2337)
Fix sonar warnings in repo.ts and search.ts (#2373)
Fixed build break (#2372)
Split repo.ts and search.ts (#2361)
Implement Alphabetical Sorting Using localeCompare (#2365)
Update lib-storage.ts manual mock to use aws-sdk-client-mock (#2358)
Fixes #2052 - Config option to save audit events (#2357)
Fixes #2304 - ProjectMembership access-policy search param (#2360)
Fixes #2333 - added $versions operation (#2359)
ImpliesAtom (#2352)
Update client-lambda manual mock to use aws-sdk-client-mock (#2347)
Deploy sourcemaps (#2356)
Fixes #2354 - always use normalizeOperationOutcome (#2355)
Fixes #2350 - estimated count filtering on human name (#2351)
Dependency upgrades (#2348)
Fixes #2343: Update project operation $expunge everything to use AsyncJob (#2345)
update CLI docs on bulk target-directory (#2344)
Fixes #2311 - better expression parsing in getSearchParameterDetails (#2324)
github-merge-queue bot pushed a commit that referenced this pull request Jul 13, 2023
Use eslint-config in examples (#2456)
Add bundle to resource array in MedplumClient (#2445)
Add server config for logLevel (#2437)
Allow `/email` path in CORS (#2455)
Add clientId as optional prop to RegisterForm (#2452)
Instructions on setting up new patient registration (#2453)
Enable sourcemaps in server docker image (#2449)
Automatically restart redis docker container on local dev (#2446)
Fixes #2439 - clarify node 18+ required (#2442)
Fix json bug in access controls docs (#2440)
Use user repo in project admin tools (#2435)
Preliminary article on auth integration patterns (#2422)
Move medplum-demo-bots to /examples (#2403)
Fixes #2431 - handle client_id in /auth/newuser (#2434)
Fix localStorage infinite loop bug (#2436)
Change SearchControl to default to accurate (#2432)
Updated title (#2433)
Add DocumentReference resource type to ServiceRequest timeline (#2428)
Added jwt bearer token auth to MedplumClient (#2408)
Update packages/core/src/typeschema/validation.test.ts (#2430)
Create sweep.yaml config file (#2427)
Update bot-basics.md (#2424)
Adding tests to confirm hidden fields behavior (#2425)
Fix validation log condition (#2421)
Clarify Mutations documentaiton (#2417)
Constraint validation  (#2321)
Document basic functionality of the Medplum App (#2405)
Fix code complexity warning in search param details (#2415)
Ignore graphiql in sonar analysis (#2414)
Fixed more sonar warnings (#2416)
Validate Medplum resource profiles (#2404)
Update manual mock to use aws-sdk-client-mock (#2407)
Fix sonar code smells (#2413)
Update packages/app/src/HomePage.tsx (#2412)
Update packages/app/src/FormPage.tsx (#2411)
Updating broken links found during demo (#2391)
Fixes #2396 - block reset password with external auth (#2399)
Added docs on $resend operation (#2394)
Updated homepage (#2243)
Add `~` to SearchControl count to indicate estimated counts (#2380)
Add Environment Variable Config Support (#2378)
Add merge group CI triggers (#2393)
Fixes regression in string array filters (#2392)
Perf improvement to getTypedPropertyValue (#2389)
Fix merge conflict in validation test (#2390)
Cut over to new validation logic (#2382)
Add test for profile walking into base type schema (#2388)
Adding documentation and examples for CLI optional params to connect to other fhir servers (#2303)
Update client-sesv2 manual mock to use aws-sdk-client-mock (#2381)
#1314 Add an API Collection for Postman, as well as an env template a… (#2325)
Document `_total` search param (#2379)
Fixes #2374 - updated jest babel config (#2375)
Implement slice validation (#2337)
Fix sonar warnings in repo.ts and search.ts (#2373)
Fixed build break (#2372)
Split repo.ts and search.ts (#2361)
Implement Alphabetical Sorting Using localeCompare (#2365)
Update lib-storage.ts manual mock to use aws-sdk-client-mock (#2358)
Fixes #2052 - Config option to save audit events (#2357)
Fixes #2304 - ProjectMembership access-policy search param (#2360)
Fixes #2333 - added $versions operation (#2359)
ImpliesAtom (#2352)
Update client-lambda manual mock to use aws-sdk-client-mock (#2347)
Deploy sourcemaps (#2356)
Fixes #2354 - always use normalizeOperationOutcome (#2355)
Fixes #2350 - estimated count filtering on human name (#2351)
Dependency upgrades (#2348)
Fixes #2343: Update project operation $expunge everything to use AsyncJob (#2345)
update CLI docs on bulk target-directory (#2344)
Fixes #2311 - better expression parsing in getSearchParameterDetails (#2324)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
auth Authentication and authorization features and fixes
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants