2020)
2121from oauth2_provider .oauth2_validators import OAuth2Validator
2222from oauth2_provider .settings import oauth2_settings
23- from oauth2_provider .views .oidc import RPInitiatedLogoutView , _load_id_token , _validate_claims
23+ from oauth2_provider .views .oidc import (
24+ RPInitiatedLogoutView ,
25+ SessionIFrameView ,
26+ _load_id_token ,
27+ _validate_claims ,
28+ )
2429
2530from . import presets
2631from .common_testing import OAuth2ProviderTestCase as TestCase
@@ -116,6 +121,13 @@ def test_get_connect_discovery_info_with_rp_logout(self):
116121 self .oauth2_settings .OIDC_RP_INITIATED_LOGOUT_ENABLED = True
117122 self .expect_json_response_with_rp_logout (self .oauth2_settings .OIDC_ISS_ENDPOINT )
118123
124+ def test_get_session_manangement_iframe_endpoint (self ):
125+ self .oauth2_settings .OIDC_SESSION_MANAGEMENT_ENABLED = True
126+ response = self .client .get (reverse ("oauth2_provider:oidc-connect-discovery-info" ))
127+ self .assertEqual (response .status_code , 200 )
128+ response_data = response .json ()
129+ self .assertIn ("check_session_iframe" , response_data .keys ())
130+
119131 def test_get_connect_discovery_info_without_issuer_url (self ):
120132 self .oauth2_settings .OIDC_ISS_ENDPOINT = None
121133 self .oauth2_settings .OIDC_USERINFO_ENDPOINT = None
@@ -216,29 +228,31 @@ def test_get_jwks_info_multiple_rsa_keys(self):
216228
217229@pytest .mark .usefixtures ("oauth2_settings" )
218230@pytest .mark .oauth2_settings (presets .OIDC_SETTINGS_SESSION_MANAGEMENT )
219- class TestAuthorizationView (TestCase ):
220- def test_session_state_is_present_in_url (self ):
231+ class TestSessionManagement (TestCase ):
232+ def setUp (self ):
221233 User = get_user_model ()
222234 Application = get_application_model ()
223235
224- User .
objects .
create_user (
"test_user" ,
"[email protected] " ,
"123456" )
225- dev_user = User .
objects .
create_user (
"dev_user" ,
"[email protected] " ,
"123456" )
236+ self . user = User .
objects .
create_user (
"test_user" ,
"[email protected] " ,
"123456" )
237+ self . developer = User .
objects .
create_user (
"dev_user" ,
"[email protected] " ,
"123456" )
226238
227- application = Application .objects .create (
239+ self . application = Application .objects .create (
228240 name = "Test Application" ,
229241 redirect_uris = (
230242 "http://localhost http://example.com http://example.org custom-scheme://example.com"
231243 ),
232- user = dev_user ,
244+ user = self . developer ,
233245 client_type = Application .CLIENT_CONFIDENTIAL ,
234246 authorization_grant_type = Application .GRANT_AUTHORIZATION_CODE ,
235247 client_secret = "1234567890qwertyuiop" ,
236248 )
249+
250+ def test_session_state_is_present_in_authorization (self ):
237251 self .client .login (username = "test_user" , password = "123456" )
238252 response = self .client .post (
239253 reverse ("oauth2_provider:authorize" ),
240254 {
241- "client_id" : application .client_id ,
255+ "client_id" : self . application .client_id ,
242256 "response_type" : "code" ,
243257 "state" : "random_state_string" ,
244258 "scope" : "read write" ,
@@ -247,7 +261,16 @@ def test_session_state_is_present_in_url(self):
247261 },
248262 )
249263 self .assertEqual (response .status_code , 302 )
250- self .assertTrue ("session_state" in response ["Location" ])
264+ self .assertIn ("session_state" , response ["Location" ])
265+
266+ def test_cookie_name_is_included_in_iframe_endpoint (self ):
267+ request = RequestFactory ().get (reverse ("oauth2_provider:session-iframe" ))
268+ request .user = self .user
269+ view = SessionIFrameView ()
270+ view .setup (request )
271+ context = view .get_context_data ()
272+ self .assertIn ("cookie_name" , context )
273+ self .assertEqual (context ["cookie_name" ], "oidc_ua_agent_state" )
251274
252275
253276def mock_request ():
0 commit comments