在Python中对多个请求使用单点登录(SSO),通常涉及到使用OAuth 2.0协议。OAuth 2.0是一种授权框架,允许第三方应用在用户授权的情况下访问受保护的资源。以下是一个基本的步骤指南,以及如何使用Python实现SSO。
以下是一个使用requests-oauthlib
库实现OAuth 2.0的示例,以Google为例。
pip install requests requests-oauthlib
CLIENT_ID = 'your-client-id'
CLIENT_SECRET = 'your-client-secret'
REDIRECT_URI = 'http://localhost:5000/callback'
AUTHORIZATION_BASE_URL = 'https://accounts.google.com/o/oauth2/v2/auth'
TOKEN_URL = 'https://oauth2.googleapis.com/token'
SCOPE = ['email', 'profile']
from flask import Flask, redirect, request, url_for
from requests_oauthlib import OAuth2Session
from config import CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, AUTHORIZATION_BASE_URL, TOKEN_URL, SCOPE
app = Flask(__name__)
@app.route('/')
def index():
google = OAuth2Session(CLIENT_ID, scope=SCOPE, redirect_uri=REDIRECT_URI)
authorization_url, state = google.authorization_url(AUTHORIZATION_BASE_URL)
return redirect(authorization_url)
@app.route('/callback')
def callback():
google = OAuth2Session(CLIENT_ID, state=request.args.get('state'), redirect_uri=REDIRECT_URI)
token = google.fetch_token(TOKEN_URL, client_secret=CLIENT_SECRET, authorization_response=request.url)
# 使用访问令牌访问受保护的资源
response = google.get('https://www.googleapis.com/oauth2/v1/userinfo')
user_info = response.json()
return f'Hello, {user_info["name"]}! Your email is {user_info["email"]}'
if __name__ == '__main__':
app.run(debug=True)
config.py
中包含了客户端ID、客户端密钥、回调URL等信息。index
路由引导用户到Google的授权页面。callback
路由处理授权码并交换访问令牌,然后使用访问令牌获取用户信息。通过这种方式,你可以为多个请求实现单点登录,从而简化用户的认证流程。
领取专属 10元无门槛券
手把手带您无忧上云