Skip to content

Commit 008a243

Browse files
Merge pull request #1423 from NHSDigital/feature/ERSSUP-71856
ERSSUP-71856 Decode ID token and set IAL claim as a new header
2 parents 430630b + c3f4c27 commit 008a243

File tree

9 files changed

+57
-4
lines changed

9 files changed

+57
-4
lines changed

azure/project.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ variables:
33
short_service_name: ers
44
service_base_path: referrals
55
product_display_name: e-Referrals-Service
6-
product_description: The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://developer.nhs.uk/apis/e-Referrals/index.html
7-
spec_file: e-referrals-service-api.json
6+
product_description: The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://digital.nhs.uk/developer/api-catalogue/e-referral-service-fhir
7+
spec_file: e-referrals-service-api.json
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<AssignMessage continueOnError="true" name="AssignMessage.Set.x-ers-acr-header">
2+
<Set>
3+
<Headers>
4+
<Header name="x-ers-acr">{jwt.DecodeJWT-id-token.decoded.claim.acr}</Header>
5+
</Headers>
6+
</Set>
7+
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
8+
<AssignTo createNew="false"/>
9+
</AssignMessage>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<AssignMessage continueOnError="true" name="AssignMessage.Set.x-ers-amr-header">
2+
<Set>
3+
<Headers>
4+
<Header name="x-ers-amr">{accesstoken.id_token-amr}</Header>
5+
</Headers>
6+
</Set>
7+
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
8+
<AssignTo createNew="false"/>
9+
</AssignMessage>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<AssignMessage continueOnError="true" name="AssignMessage.Set.x-ers-id-assurance-level-header">
2+
<Set>
3+
<Headers>
4+
<Header name="x-ers-id-assurance-level">{jwt.DecodeJWT-id-token.decoded.claim.id_assurance_level}</Header>
5+
</Headers>
6+
</Set>
7+
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
8+
<AssignTo createNew="false"/>
9+
</AssignMessage>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<DecodeJWT continueOnError="true" name="DecodeJWT-id-token">
2+
<Source>accesstoken.id_token</Source>
3+
</DecodeJWT>

proxies/live/apiproxy/targets/ers-target.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@
113113
<Condition>(request.header.nhsd-ers-referral-id ~~ ".+")</Condition>
114114
</Step> <Step>
115115
<Name>AssignMessage.Remove.x-request-id-header</Name>
116+
</Step><Step>
117+
<Name>AssignMessage.Set.x-ers-amr-header</Name>
118+
</Step><Step>
119+
<Name>DecodeJWT-id-token</Name>
120+
</Step><Step>
121+
<Name>AssignMessage.Set.x-ers-acr-header</Name>
122+
</Step><Step>
123+
<Name>AssignMessage.Set.x-ers-id-assurance-level-header</Name>
116124
</Step> {% if ALLOW_ECHO_TARGET | default(false) == true %}<Step>
117125
<Name>AssignMessage.SetEchoTarget</Name>
118126
<Condition>(request.header.echo)</Condition>

specification/e-referrals-service-api.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ x-nhsd-api-platform:
88
short_service_name: ers
99
service_base_path: referrals
1010
product_display_name: e-Referrals-Service
11-
product_description: 'The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://developer.nhs.uk/apis/e-Referrals/index.html'
11+
product_description: 'The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://digital.nhs.uk/developer/api-catalogue/e-referral-service-fhir'
1212
pipeline_name_prefix: E-Referrals-Service
1313
info:
1414
version: 0.0.1

terraform/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ module "e-referrals-service-api" {
2222
namespace = var.namespace
2323
make_api_product = !(length(regexall("sandbox", var.apigee_environment)) > 0)
2424
api_product_display_name = length(var.namespace) > 0 ? "e-referrals-service-api${var.namespace}" : "e-Referrals-Service"
25-
api_product_description = "The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://developer.nhs.uk/apis/e-Referrals/index.html"
25+
api_product_description = "The NHS e-RS vision is to enable local innovation and adoption of paperless referrals. To support this vision NHS Digital have created a set of APIs which provide a well-defined, simple to use data interface to the NHS e-Referral Service (e-RS). See https://digital.nhs.uk/developer/api-catalogue/e-referral-service-fhir"
2626
}

tests/integration/test_headers.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
_HEADER_REQUEST_ID = "x-request-id"
1212
_HEADER_ASID = "xapi_asid"
1313
_HEADER_ACCESS_MODE = "x-ers-access-mode"
14+
_HEADER_ACR = "x-ers-acr"
15+
_HEADER_AMR = "x-ers-amr"
16+
_HEADER_ID_ASSURANCE_LEVEL = "x-ers-id-assurance-level"
1417

1518
_EXPECTED_REFERRAL_ID = "000000040032"
1619
_EXPECTED_CORRELATION_ID = "123123-123123-123123-123123"
@@ -19,6 +22,9 @@
1922
_EXPECTED_COMM_RULE_ORG = "R100"
2023
_EXPECTED_OBO_USER_ID = "0123456789000"
2124
_EXPECTED_ACCESS_MODE = "user-restricted"
25+
_EXPECTED_ACR = "AAL3_ANY"
26+
_EXPECTED_AMR = "[N3_SMARTCARD]"
27+
_EXPECTED_ID_ASSURANCE_LEVEL = "3"
2228

2329
_SPECIALTY_REF_DATA_URL = "/FHIR/STU3/CodeSystem/SPECIALTY"
2430
_SEARCH_HEALTHCARE_SERVICE_R4_URL = "/FHIR/R4/HealthcareService"
@@ -142,6 +148,15 @@ def assert_ok_echo_response(
142148
assert target_request_headers[_HEADER_USER_ID] == referring_clinician.user_id
143149
assert target_request_headers[_HEADER_BASE_URL] == service_url
144150
assert target_request_headers[_HEADER_ACCESS_MODE] == _EXPECTED_ACCESS_MODE
151+
assert target_request_headers[_HEADER_ACR] == _EXPECTED_ACR
152+
assert target_request_headers[_HEADER_AMR] == _EXPECTED_AMR
153+
154+
# TODO: Uncomment IAL assert when APIM's CIS2 mock starts returning it
155+
156+
# assert (
157+
# target_request_headers[_HEADER_ID_ASSURANCE_LEVEL]
158+
# == _EXPECTED_ID_ASSURANCE_LEVEL
159+
# )
145160

146161
@pytest.mark.asyncio
147162
async def test_access_mode_header_overwritten_on_echo_target(

0 commit comments

Comments
 (0)