Back to snippets

flask_idme_oauth2_authorization_code_flow_quickstart.py

python

A 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)