department-of-veterans-affairs / va.gov-team

Public resources for building on and in support of VA.gov. Visit complete Knowledge Hub:
https://depo-platform-documentation.scrollhelp.site/index.html
282 stars 203 forks source link

Establish Handshake with LH API (Part 2) #35243

Closed jason-gcio closed 2 years ago

jason-gcio commented 2 years ago

Background

Now that Platform has finally told us that generating the keys is our duty (and storing them in AWS Parameter Store) (thanks to Jeremy B.), we can continue with the technicals.

Tasks

Acceptance Criteria

Spike Braindump

There are several steps in making an API request. At a high level they are:

  1. Create a JWT
  2. Sign the JWT with your private key
  3. Using the signed JWT (called a client assertion), request an access token from LH's token service
  4. Take that access token and include in the Authorization header for Benefits-Claims API requests

The above steps in more granularity

That will return a response similar to this:

{"access_token":"eyJraWQiOiJFSVJKTm12Ykk3eUJwbXJzRDg2R09kYTlUa2FNNS16US1mZlMwYzRhRllBIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULjk1ZEgxSXZmU3lZOThlZFZMMW1EZGRDeTBaZzhoSWZFN19iVmdoQzlTWnMiLCJpc3MiOiJodHRwczovL2RlcHR2YS1ldmFsLm9rdGEuY29tL29hdXRoMi9hdXNkZzdndWlzMlRZRGxGZTJwNyIsImF1ZCI6Imh0dHBzOi8vc2FuZGJveC1hcGkudmEuZ292L3NlcnZpY2VzL2NsYWltcyIsImlhdCI6MTY0MjUyNDExNiwiZXhwIjoxNjQyNTI0NDE2LCJjaWQiOiIwb2FlZnljZWF5bWNYODhqOTJwNyIsInNjcCI6WyJjbGFpbS53cml0ZSIsImNsYWltLnJlYWQiXSwic3ViIjoiMG9hZWZ5Y2VheW1jWDg4ajkycDcifQ.ZdTnlAP4rEStVDPB3dy20bs9Pzo6AnOoeZgJ_ow74cNF_0cPnkSnM-Wcuw4yS1DIO9-XqBBsvrPpZ6VD2DMbkWL6qDk5_vfGy1XWKMbPn31-6HPjUeRfIjXP358_fq_0b6YZDEaOG_g7pN4QkwcHJPTpEV8_03VElAKmqLnkxCwcTl7GGnWXsjb_3y6IuoALgiAhIhWcnwsSid4UuCN9gY2iKPhSwz3jkvxLElN92Xz090OEBIrbgdY3pm7B9LZvIwl76rdv01hWF32rzWwPSc4LaI4YoWxH9FzKl-T7NToL8zLz94D6BQhQCszx8z4ZDnt2sEMEOou6i_lxMsD0QQ","token_type":"Bearer","scope":"claim.write claim.read","expires_in":300,"state":null}

Finally, take that access_token and put it inside the Authorization header of a Benefits-Claims API call. For example, to get the veteran's current Rep:

curl -X GET 'https://sandbox-api.va.gov/services/claims/v1/forms/2122/active' \
  --header 'X-VA-SSN: 796127677' \
  --header 'X-VA-First-Name: Janet' \
  --header 'X-VA-Last-Name: Moore' \
  --header 'X-VA-Birth-Date: 1949-05-06' \
  --header 'Authorization: Bearer eyJraWQiOiJFSVJKTm12Ykk3eUJwbXJzRDg2R09kYTlUa2FNNS16US1mZlMwYzRhRllBIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULjk1ZEgxSXZmU3lZOThlZFZMMW1EZGRDeTBaZzhoSWZFN19iVmdoQzlTWnMiLCJpc3MiOiJodHRwczovL2RlcHR2YS1ldmFsLm9rdGEuY29tL29hdXRoMi9hdXNkZzdndWlzMlRZRGxGZTJwNyIsImF1ZCI6Imh0dHBzOi8vc2FuZGJveC1hcGkudmEuZ292L3NlcnZpY2VzL2NsYWltcyIsImlhdCI6MTY0MjUyNDExNiwiZXhwIjoxNjQyNTI0NDE2LCJjaWQiOiIwb2FlZnljZWF5bWNYODhqOTJwNyIsInNjcCI6WyJjbGFpbS53cml0ZSIsImNsYWltLnJlYWQiXSwic3ViIjoiMG9hZWZ5Y2VheW1jWDg4ajkycDcifQ.ZdTnlAP4rEStVDPB3dy20bs9Pzo6AnOoeZgJ_ow74cNF_0cPnkSnM-Wcuw4yS1DIO9-XqBBsvrPpZ6VD2DMbkWL6qDk5_vfGy1XWKMbPn31-6HPjUeRfIjXP358_fq_0b6YZDEaOG_g7pN4QkwcHJPTpEV8_03VElAKmqLnkxCwcTl7GGnWXsjb_3y6IuoALgiAhIhWcnwsSid4UuCN9gY2iKPhSwz3jkvxLElN92Xz090OEBIrbgdY3pm7B9LZvIwl76rdv01hWF32rzWwPSc4LaI4YoWxH9FzKl-T7NToL8zLz94D6BQhQCszx8z4ZDnt2sEMEOou6i_lxMsD0QQ'

And that will return whatever response based on the endpoint we are using. For the call above, it would return:

{"data":{"id":null,"type":"claims_api_power_of_attorneys","attributes":{"status":"updated","date_request_accepted":"2022-01-11","representative":{"service_organization":{"first_name":null,"last_name":null,"organization_name":"074 - AMERICAN LEGION","phone_number":null,"poa_code":"074"}},"previous_poa":"095"}}}

Todo's / New Tickets

RudyOnRails commented 2 years ago

@jason-gcio ok, I think I have documented the basics. Let me know if anything is missing or needs tweaking/better-wording.

Should I make tickets for the next steps?