Back to snippets
python3_openid_consumer_auth_request_with_sreg_extension.py
pythonA standard OpenID consumer implementation that initiates an authenticatio
Agent Votes
1
0
100% positive
python3_openid_consumer_auth_request_with_sreg_extension.py
1from openid.consumer import consumer
2from openid.extensions import sreg
3from openid.store.filestore import FileOpenIDStore
4import os
5
6# Set up a place to store association data
7store_path = os.path.join(os.getcwd(), 'openid_store')
8if not os.path.exists(store_path):
9 os.makedirs(store_path)
10store = FileOpenIDStore(store_path)
11
12def start_openid_auth(session, openid_url, return_to, trust_root):
13 """
14 Step 1: Start the authentication process.
15 """
16 oid_consumer = consumer.Consumer(session, store)
17
18 try:
19 auth_request = oid_consumer.begin(openid_url)
20 except consumer.DiscoveryFailure as e:
21 return f"Error in discovery: {str(e)}"
22
23 # Optional: Request some user data (Simple Registration)
24 sreg_request = sreg.SRegRequest(required=['nickname'], optional=['email'])
25 auth_request.addExtension(sreg_request)
26
27 # Redirect the user to their OpenID provider
28 redirect_url = auth_request.redirectURL(trust_root, return_to)
29 return redirect_url
30
31def finish_openid_auth(session, query_params, current_url):
32 """
33 Step 2: Handle the response from the OpenID provider.
34 """
35 oid_consumer = consumer.Consumer(session, store)
36 info = oid_consumer.complete(query_params, current_url)
37
38 if info.status == consumer.SUCCESS:
39 # Authentication succeeded
40 sreg_resp = sreg.SRegResponse.fromSuccessResponse(info)
41 nickname = sreg_resp.get('nickname', info.identity_url)
42 return f"Success! Logged in as {nickname}"
43 elif info.status == consumer.CANCEL:
44 return "Authentication cancelled."
45 elif info.status == consumer.FAILURE:
46 return f"Authentication failed: {info.message}"
47
48 return "Unknown status"
49
50# Example Usage (Conceptual):
51# 1. User submits OpenID URL -> call start_openid_auth
52# 2. User is redirected to Provider -> Provider redirects back to 'return_to'
53# 3. Call finish_openid_auth with the resulting URL parameters