@@ -35,6 +35,15 @@ class Fixtures:
35
35
36
36
37
37
TEST_CONFIG = {
38
+ "client_id" : "CongenitalOptimist" ,
39
+ "audience" : "NeverAgain" ,
40
+ "base_authorization_server_uri" : "WhatAreTheCivilianApplications?" ,
41
+ "issuer" : "PokeItWithAStick" ,
42
+ "signature_cache_ttl" : 6e3 ,
43
+ }
44
+
45
+ # Test configuration without audience
46
+ TEST_CONFIG_NO_AUD = {
38
47
"client_id" : "CongenitalOptimist" ,
39
48
"base_authorization_server_uri" : "WhatAreTheCivilianApplications?" ,
40
49
"issuer" : "PokeItWithAStick" ,
@@ -46,7 +55,39 @@ def _make_token(
46
55
email : str ,
47
56
private_key : str = Fixtures .TESTING_PRIVATE_KEY ,
48
57
client_id : str = str (TEST_CONFIG ["client_id" ]),
58
+ audience : str = str (TEST_CONFIG ["audience" ]),
49
59
issuer : str = str (TEST_CONFIG ["issuer" ]),
60
+ ) -> str :
61
+ now = int (time .time ())
62
+ return jwt .encode (
63
+ {
64
+ "aud" : audience ,
65
+ "iss" : issuer ,
66
+ "email" : email ,
67
+ "name" : "SweetAndFullOfGrace" ,
68
+ "preferred_username" : "Sweet" ,
69
+ "exp" : now + 30 ,
70
+ "auth_time" : now ,
71
+ "sub" : "foo" ,
72
+ "ver" : "1" ,
73
+ "iat" : now ,
74
+ "jti" : str (uuid .uuid4 ()),
75
+ "amr" : [],
76
+ "idp" : "" ,
77
+ "nonce" : "" ,
78
+ "at_hash" : "" ,
79
+ },
80
+ private_key ,
81
+ algorithm = "RS256" ,
82
+ ).decode ("UTF-8" )
83
+
84
+
85
+ # Make a token where audience is client_id
86
+ def _make_token_no_aud (
87
+ email : str ,
88
+ private_key : str = Fixtures .TESTING_PRIVATE_KEY ,
89
+ client_id : str = str (TEST_CONFIG_NO_AUD ["client_id" ]),
90
+ issuer : str = str (TEST_CONFIG_NO_AUD ["issuer" ]),
50
91
) -> str :
51
92
now = int (time .time ())
52
93
return jwt .encode (
@@ -87,3 +128,22 @@ class functions:
87
128
authenticate_user = auth .get_auth (** TEST_CONFIG )
88
129
IDToken = authenticate_user (auth_header = f"Bearer { token } " )
89
130
assert IDToken .email == email # nosec
131
+
132
+
133
+ # Ensure that when no audience is supplied, that the audience defaults to client ID
134
+ def test__authenticate_user_no_aud (monkeypatch ):
135
+ def mock_discovery (* args , ** kwargs ):
136
+ class functions :
137
+ auth_server = lambda ** _ : Fixtures .OIDC_DISCOVERY_RESPONSE
138
+ public_keys = lambda _ : Fixtures .TESTING_PUBLIC_KEY
139
+ signing_algos = lambda x : x ["id_token_signing_alg_values_supported" ]
140
+
141
+ return functions
142
+
143
+ monkeypatch .setattr (auth .discovery , "configure" , mock_discovery )
144
+ email = "AnticipationOfANewLoversArrivalThe@VeryLittleGravitasIndeed"
145
+ token = _make_token_no_aud (email = email )
146
+ authenticate_user = auth .get_auth (** TEST_CONFIG_NO_AUD )
147
+ IDToken = authenticate_user (auth_header = f"Bearer { token } " )
148
+ assert IDToken .email == email # nosec
149
+ assert IDToken .aud == TEST_CONFIG_NO_AUD ["client_id" ]
0 commit comments