小白也能懂的 linuxdo oauth2 快速上手

再贴一个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进行处理

9 个赞