【发布时间】:2021-04-06 21:07:18
【问题描述】:
使用 MSAL 文档中给出的基本示例,我根本无法从 MSAL 包中获取 acquire_token_by_auth_code_flow() 在烧瓶应用程序之外工作。
我认为问题来自使用错误的身份验证响应,根据文档,该响应必须是“从身份验证服务器收到的查询字符串的字典”。在烧瓶应用程序中,我可以简单地使用request.args,我不太确定如何在烧瓶之外使用。
我已经尝试过使用requests.request 和urlsplit。设备流程工作正常,并且使用 Java 中的 MSAL 包并通过 R 连接。所以应用程序似乎设置正确。
下面 MSAL 应用程序的基本示例代码会产生错误:
状态不匹配:XXXXXXXXXXXX 与无
(所以auth_response 是错误的)。
有什么想法吗?
import requests
import msal
CLIENT_ID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # Application (client) ID of app registration
CLIENT_SECRET = "XX-XXXXXXXX-XXXXXXXX.XX~XXXXX~XXXX" # Placeholder - for use ONLY during testing.
AUTHORITY = "https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX"
REDIRECT_PATH = "/getAToken" # Used for forming an absolute URL to your redirect URI.
# The absolute URL must match the redirect URI you set
# in the app's registration in the Azure portal.
ENDPOINT = 'https://graph.microsoft.com/v1.0/me'
SCOPE = ["https://graph.microsoft.com/.default"]
# Cache
cache = msal.SerializableTokenCache()
# Build msal app
app = msal.ConfidentialClientApplication(
CLIENT_ID, authority=AUTHORITY,
client_credential=CLIENT_SECRET, token_cache=cache)
# Initiate auth code flow
session = requests.Session()
session.flow = app.initiate_auth_code_flow(scopes=SCOPE, redirect_uri=REDIRECT_PATH)
# Aquire token
result = app.acquire_token_by_auth_code_flow(auth_code_flow=session.flow, auth_response = dict(parse.parse_qsl(parse.urlsplit(REDIRECT_PATH).query)))
flask 应用程序中最后一位的等效代码如下所示:REDIRECT_PATH = "/getAToken":
@app.route(app_config.REDIRECT_PATH) # Its absolute URL must match your app's redirect_uri set in AAD
def authorized():
result = _build_msal_app(cache=cache).acquire_token_by_auth_code_flow(
session.get("flow", {}), request.args)
return redirect(url_for("index"))
【问题讨论】:
标签: python flask oauth-2.0 azure-active-directory msal