Skip to content

Commit a2ae3e6

Browse files
author
Rebecka Gulliksson
committed
Add possibility to add extra parameters to authn request.
1 parent 5b2dd8d commit a2ae3e6

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

src/flask_pyoidc/flask_pyoidc.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111

1212
class OIDCAuthentication(object):
1313
def __init__(self, flask_app, client_registration_info=None, issuer=None,
14-
provider_configuration_info=None, userinfo_endpoint_method='POST'):
14+
provider_configuration_info=None, userinfo_endpoint_method='POST',
15+
extra_request_args=None):
1516
self.app = flask_app
1617
self.userinfo_endpoint_method = userinfo_endpoint_method
18+
self.extra_request_args = extra_request_args or {}
1719

1820
self.client = Client(client_authn_method=CLIENT_AUTHN_METHOD)
1921
if not issuer and not provider_configuration_info:
@@ -59,6 +61,7 @@ def _authenticate(self):
5961
'nonce': flask.session['nonce'],
6062
}
6163

64+
args.update(self.extra_request_args)
6265
auth_req = self.client.construct_AuthorizationRequest(request_args=args)
6366
login_url = auth_req.request(self.client.authorization_endpoint)
6467
return redirect(login_url)

tests/requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
pytest
22
mock
3-
responses==0.5.1
3+
responses==0.5.1
4+
six

tests/test_flask_pyoidc.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import json
2+
from six.moves.urllib.parse import parse_qsl, urlparse
3+
24
from mock import MagicMock
35

46
import flask
@@ -65,3 +67,14 @@ def test_no_userinfo_request_is_done_if_no_userinfo_endpoint_method_is_specified
6567
authn.client.do_user_info_request = userinfo_request_mock
6668
authn._do_userinfo_request(state, None)
6769
assert not userinfo_request_mock.called
70+
71+
def test_authenticatate_with_extra_request_parameters(self):
72+
extra_params = {"foo": "bar", "abc": "xyz"}
73+
authn = OIDCAuthentication(self.app, provider_configuration_info={'issuer': ISSUER},
74+
client_registration_info={'client_id': 'foo'},
75+
extra_request_args=extra_params)
76+
77+
with self.app.test_request_context('/'):
78+
a = authn._authenticate()
79+
request_params = dict(parse_qsl(urlparse(a.location).query))
80+
assert set(extra_params.items()).issubset(set(request_params.items()))

0 commit comments

Comments
 (0)