class TestRPHandlerTier2(object): @pytest.fixture(autouse=True) def rphandler_setup(self): self.rph = RPHandler(BASE_URL, CLIENT_CONFIG, keyjar=CLI_KEY) res = self.rph.begin(issuer_id='github') _session = self.rph.get_session_information(res['state']) client = self.rph.issuer2rp[_session['iss']] _nonce = _session['auth_request']['nonce'] _iss = _session['iss'] _aud = client.client_id idval = { 'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss, 'aud': _aud } _github_id = iss_id('github') client.service_context.keyjar.import_jwks( GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id) idts = IdToken(**idval) _signed_jwt = idts.to_jwt(key=GITHUB_KEY.get_signing_key( 'rsa', issuer_id=_github_id), algorithm="RS256", lifetime=300) _info = { "access_token": "accessTok", "id_token": _signed_jwt, "token_type": "Bearer", "expires_in": 3600, 'refresh_token': 'refreshing' } at = AccessTokenResponse(**_info) _url = "https://github.com/token" with responses.RequestsMock() as rsps: rsps.add("POST", _url, body=at.to_json(), adding_headers={"Content-Type": "application/json"}, status=200) client.service['accesstoken'].endpoint = _url _response = AuthorizationResponse(code='access_code', state=res['state']) auth_response = self.rph.finalize_auth(client, _session['iss'], _response.to_dict()) token_resp = self.rph.get_access_and_id_token(auth_response, client=client) _url = "https://github.com/token" with responses.RequestsMock() as rsps: rsps.add("GET", _url, body='{"sub":"EndUserSubject"}', adding_headers={"Content-Type": "application/json"}, status=200) client.service['userinfo'].endpoint = _url self.rph.get_user_info(res['state'], client, token_resp['access_token']) self.state = res['state'] def test_init_authorization(self): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] res = self.rph.init_authorization( client, req_args={'scope': ['openid', 'email']}) part = urlsplit(res['url']) _qp = parse_qs(part.query) assert _qp['scope'] == ['openid email'] def test_refresh_access_token(self): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] _info = { "access_token": "2nd_accessTok", "token_type": "Bearer", "expires_in": 3600 } at = AccessTokenResponse(**_info) _url = "https://github.com/token" with responses.RequestsMock() as rsps: rsps.add("POST", _url, body=at.to_json(), adding_headers={"Content-Type": "application/json"}, status=200) client.service['refresh_token'].endpoint = _url res = self.rph.refresh_access_token(self.state, client, 'openid email') assert res['access_token'] == '2nd_accessTok' def test_get_user_info(self): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] _url = "https://github.com/userinfo" with responses.RequestsMock() as rsps: rsps.add("GET", _url, body='{"sub":"EndUserSubject", "mail":"*****@*****.**"}', adding_headers={"Content-Type": "application/json"}, status=200) client.service['userinfo'].endpoint = _url resp = self.rph.get_user_info(self.state, client) assert set(resp.keys()) == {'sub', 'mail'} assert resp['mail'] == '*****@*****.**' def test_has_active_authentication(self): assert self.rph.has_active_authentication(self.state) def test_get_valid_access_token(self): (token, expires_at) = self.rph.get_valid_access_token(self.state) assert token == 'accessTok' assert expires_at > 0
class TestRPHandlerTier2(object): @pytest.fixture(autouse=True) def rphandler_setup(self, httpserver): self.rph = RPHandler(base_url=BASEURL, client_configs=CLIENT_CONFIG) res = self.rph.begin(issuer_id='github') _session = self.rph.get_session_information(res['state']) client = self.rph.issuer2rp[_session['iss']] _nonce = _session['auth_request']['nonce'] _iss = _session['iss'] _aud = client.client_id idval = {'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss, 'aud': _aud} idts = IdToken(**idval) _signed_jwt = idts.to_jwt( key=client.service_context.keyjar.get_signing_key('oct'), algorithm="HS256", lifetime=300) _info = {"access_token": "accessTok", "id_token": _signed_jwt, "token_type": "Bearer", "expires_in": 3600, 'refresh_token': 'refreshing'} at = AccessTokenResponse(**_info) httpserver.serve_content(at.to_json()) client.service['accesstoken'].endpoint = httpserver.url _response = AuthorizationResponse(code='access_code', state=res['state']) auth_response = self.rph.finalize_auth(client, _session['iss'], _response.to_dict()) token_resp = self.rph.get_access_and_id_token(auth_response, client=client) httpserver.serve_content('{"sub":"EndUserSubject"}') client.service['userinfo'].endpoint = httpserver.url self.rph.get_user_info(res['state'], client, token_resp['access_token']) self.state = res['state'] def test_init_authorization(self): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] res = self.rph.init_authorization( client, req_args={'scope': ['openid', 'email']}) part = urlsplit(res['url']) _qp = parse_qs(part.query) assert _qp['scope'] == ['openid email'] def test_refresh_access_token(self, httpserver): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] _info = {"access_token": "2nd_accessTok", "token_type": "Bearer", "expires_in": 3600} at = AccessTokenResponse(**_info) httpserver.serve_content(at.to_json()) client.service['refresh_token'].endpoint = httpserver.url res = self.rph.refresh_access_token(self.state, client, 'openid email') assert res['access_token'] == '2nd_accessTok' def test_get_user_info(self, httpserver): _session = self.rph.get_session_information(self.state) client = self.rph.issuer2rp[_session['iss']] httpserver.serve_content( '{"sub":"EndUserSubject", "mail":"*****@*****.**"}') client.service['userinfo'].endpoint = httpserver.url resp = self.rph.get_user_info(self.state, client) assert set(resp.keys()) == {'sub', 'mail'} assert resp['mail'] == '*****@*****.**' def test_has_active_authentication(self): assert self.rph.has_active_authentication(self.state) def test_get_valid_access_token(self): (token, expires_at) = self.rph.get_valid_access_token(self.state) assert token == 'accessTok' assert expires_at > 0