Вот текущая реализация:
import requests
from flask import Flask, render_template, jsonify, request, session, url_for, redirect
from flask_session import Session
from authlib.integrations.flask_client import OAuth
app = Flask("webapp")
# app.config is set here, specifically settings:
# NEXTCLOUD_CLIENT_ID
# NEXTCLOUD_SECRET
# NEXTCLOUD_API_BASE_URL
# NEXTCLOUD_AUTHORIZE_URL
# NEXTCLOUD_ACCESS_TOKEN_URL
# set session to be managed server-side
Session(app)
# register NextCloud oauth
oauth = OAuth(app)
nextcloud = oauth.register('nextcloud')
@app.route("/", methods=["GET"])
def index():
return render_template("index.html"), 200
@app.route("/nextcloud_login", methods=["GET"])
def nextcloud_login():
redirect_uri = url_for("callback_nextcloud", _external=True)
return nextcloud.authorize_redirect(redirect_uri)
@app.route('/callback/nextcloud', methods=["GET"])
def callback_nextcloud():
token = nextcloud.authorize_access_token()
session["nextcloud_token"] = token
return redirect(url_for("index"))
index маршрут показывает страницу со ссылкой на маршрут входа. Если нажимают пользователь, отправляется в экземпляр NextCloud с использованием nextCloud_authorize_url , и после согласования Auth отправляется обратно в Route/Callback/nextCloud (зарегистрировано таким образом в NextCloud). Я могу подтвердить, что он работает до этого момента, и запрос на маршрут обратного вызова выглядит так же, как get/callback/nextcloud? State = come-token & code = ровный Longer-token http/1.1 .
Однако, когда строка token = nextcloud.authorize_access_token () выполняется, не выполняется. сообщение. Потребовалось немного копания, чтобы найти сообщение об ошибке на сервере NextCloud (см. Ниже). Теперь вполне возможно, что проблема с NextCloud и не имеет ничего общего с кодом, но я нахожу это очень маловероятным, поскольку я безуспешно потратил часы, пытаясь найти клочок полезной информации в Интернете, и вряд ли я первым заметил эту проблему. На данный момент я предполагаю, что моя реализация виновата, и я надеюсь, что я просто упускаю из виду что -то очень простое.
Код: Выделить всё
OC\\Security\\Crypto::calculateHMAC(): Argument #1 ($message) must be of type string, null given, called in /var/www/nextcloud/apps/oauth2/lib/Controller/OauthApiController.php on line 142 in file '/var/www/nextcloud/lib/private/Security/Crypto.php' line 42
Подробнее здесь: https://stackoverflow.com/questions/797 ... k-fails-at