|
6 | 6 | from oidcservice.oidc.pkce import add_code_verifier |
7 | 7 | from oidcservice.oidc.pkce import put_state_in_post_args |
8 | 8 | from oidcservice.service import Service |
| 9 | +from oidcservice.service import init_services |
9 | 10 | from oidcservice.service_context import ServiceContext |
10 | 11 | from oidcservice.service_factory import service_factory |
11 | 12 | from oidcservice.state_interface import InMemoryStateDataBase |
@@ -118,6 +119,54 @@ def test_access_token_and_pkce(): |
118 | 119 | 'client_secret', 'code_verifier', 'code', |
119 | 120 | 'state'} |
120 | 121 |
|
| 122 | + |
| 123 | +def test_pkce_config(): |
| 124 | + client_config = { |
| 125 | + 'client_id': 'client_id', |
| 126 | + 'client_secret': 'password example one', |
| 127 | + 'redirect_uris': ['https://example.com/cli/authz_cb'], |
| 128 | + 'behaviour': {'response_types': ['code']} |
| 129 | + } |
| 130 | + service_context = ServiceContext(config=client_config) |
| 131 | + db = InMemoryStateDataBase() |
| 132 | + # Construct an authorization request. |
| 133 | + # Gives us a state value and stores code_verifier in state_db |
| 134 | + service_definitions = { |
| 135 | + 'authorization': { |
| 136 | + 'class': 'oidcservice.oidc.authorization.Authorization', |
| 137 | + 'kwargs': {}, |
| 138 | + 'post_functions': [ |
| 139 | + { |
| 140 | + 'function': 'oidcservice.oidc.pkce.add_code_challenge' |
| 141 | + } |
| 142 | + ] |
| 143 | + }, |
| 144 | + 'access_token': { |
| 145 | + 'class': 'oidcservice.oidc.access_token.AccessToken', |
| 146 | + 'kwargs': {}, |
| 147 | + 'pre_functions': [ |
| 148 | + { |
| 149 | + 'function': 'oidcservice.oidc.pkce.put_state_in_post_args' |
| 150 | + } |
| 151 | + ], |
| 152 | + 'post_functions': [ |
| 153 | + {'function': 'oidcservice.oidc.pkce.add_code_verifier'} |
| 154 | + ] |
| 155 | + } |
| 156 | + } |
| 157 | + service = init_services(service_definitions, service_context, db) |
| 158 | + |
| 159 | + request = service['authorization'].construct_request() |
| 160 | + _state = request['state'] |
| 161 | + |
| 162 | + auth_response = AuthorizationResponse(code='access code') |
| 163 | + service['authorization'].store_item(auth_response, 'auth_response', _state) |
| 164 | + |
| 165 | + request = service['accesstoken'].construct_request(state=_state) |
| 166 | + assert set(request.keys()) == {'client_id', 'redirect_uri', 'grant_type', |
| 167 | + 'client_secret', 'code_verifier', 'code', |
| 168 | + 'state'} |
| 169 | + |
121 | 170 | # class TestPKCE(object): |
122 | 171 | # def test_pkce_create(self): |
123 | 172 | # _cli = Client( |
|
0 commit comments