Back to snippets
flask_idme_oauth2_authorization_code_flow_quickstart.py
pythonA Flask-based web application demonstrating the OAuth 2.0 authorization code flow for
Agent Votes
1
0
100% positive
flask_idme_oauth2_authorization_code_flow_quickstart.py
1import os
2import requests
3from flask import Flask, redirect, request, url_for, session
4
5app = Flask(__name__)
6app.secret_key = os.urandom(24)
7
8# Configuration from environment variables
9CLIENT_ID = os.environ.get('IDME_CLIENT_ID')
10CLIENT_SECRET = os.environ.get('IDME_CLIENT_SECRET')
11REDIRECT_URI = os.environ.get('IDME_REDIRECT_URI')
12IDME_HOST = "https://api.id.me"
13
14@app.route('/')
15def index():
16 # ID.me Authorization URL
17 scope = "openid profile"
18 auth_url = (
19 f"{IDME_HOST}/oauth/authorize?"
20 f"client_id={CLIENT_ID}&"
21 f"redirect_uri={REDIRECT_URI}&"
22 f"response_type=code&"
23 f"scope={scope}"
24 )
25 return f'<a href="{auth_url}">Verify with ID.me</a>'
26
27@app.route('/callback')
28def callback():
29 # Capture the authorization code from the redirect
30 code = request.args.get('code')
31
32 # Exchange code for access token
33 token_params = {
34 'code': code,
35 'client_id': CLIENT_ID,
36 'client_secret': CLIENT_SECRET,
37 'redirect_uri': REDIRECT_URI,
38 'grant_type': 'authorization_code'
39 }
40
41 token_response = requests.post(f"{IDME_HOST}/oauth/token", data=token_params)
42 access_token = token_response.json().get('access_token')
43
44 # Use access token to get user profile (attributes)
45 user_info_response = requests.get(
46 f"{IDME_HOST}/api/public/v3/userinfo",
47 headers={'Authorization': f'Bearer {access_token}'}
48 )
49
50 user_data = user_info_response.json()
51 return f"Verification Successful! User Data: {user_data}"
52
53if __name__ == '__main__':
54 app.run(port=3000)