再贴一个python简单的demo
启动后浏览器访问 http://localhost:8181/oauth2/initiate
即可
详情可根据自己的需求来更改
依赖
需要按照Flask和requests
pip install Flask requests
代码
代码
from flask import Flask, session, redirect, request, jsonify
import os
import requests
app = Flask(__name__)
app.secret_key = os.urandom(24)
# OAuth2 参数
CLIENT_ID = 'hi3geJYfTotoiR5S62u3rh4W5tSeC5UG'
CLIENT_SECRET = 'VMPBVoAfOB5ojkGXRDEtzvDhRLENHpaN'
REDIRECT_URI = 'http://localhost:8181/oauth2/callback'
AUTHORIZATION_ENDPOINT = 'https://connect.linux.do/oauth2/authorize'
TOKEN_ENDPOINT = 'https://connect.linux.do/oauth2/token'
USER_ENDPOINT = 'https://connect.linux.do/api/user'
@app.route('/oauth2/initiate')
def initiate_auth():
session['oauth_state'] = os.urandom(16).hex()
authorization_url = f"{AUTHORIZATION_ENDPOINT}?client_id={CLIENT_ID}&response_type=code&redirect_uri={REDIRECT_URI}&state={session['oauth_state']}"
return redirect(authorization_url)
@app.route('/oauth2/callback')
def callback():
code = request.args.get('code')
state = request.args.get('state')
if state != session.get('oauth_state'):
return 'State value does not match', 401
# 请求token
auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
data = {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': REDIRECT_URI
}
headers = {'Accept': 'application/json'}
response = requests.post(TOKEN_ENDPOINT, auth=auth, data=data, headers=headers)
if response.status_code == 200:
# 这里获取的rt根据自己的实际进行处理 比如放入会话或数据库里
user_response = requests.get(USER_ENDPOINT, headers={'Authorization': 'Bearer ' + response.json()['access_token']})
if user_response.status_code == 200:
return jsonify(user_response.json())
else:
return 'Failed to fetch user info', user_response.status_code
else:
return 'Failed to fetch access token', response.status_code
if __name__ == '__main__':
app.run(debug=True, port=8181)
注意
代码为demo代码,实际请根据自己所需对token进行处理