我正在构建以下网址
https://login.microsoftonline.com/<tenantid>/oauth2/logout?client_id=<clientId>&post_logout_redirect_uri=<encodedurl>
看起来像
https://login.microsoftonline.com/f4aaf6e1-ffff-ffff-bb63-4e8ebf728113/oauth2/logout?client_id=f562b4e3-ffff-ffff-b4bb-49ca64216e75&post_logout_redirect_uri=https%3A%2F%2Fmyazureapp.azurewebsites.net
它会将我退出,但不会将我重定向回我的应用
像这个URL一样用于azure
https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=https%3a%2f%2fmanage.windowsazure.com%2fSignOut%2fComplete
我已经查看了建议的相关Q,我尝试了一些变化。
编辑它原来是一个间歇性问题,我猜是因为某些Cookie /其他状态在我执行开发/测试周期时无法重置。有了新的浏览器,它可以工作。当它正常工作时,退出屏幕上会出现类似“我们退出时暂停”的内容,然后重定向,当它无法正常工作时,屏幕显示“您已退出,请关闭浏览器”
答案 0 :(得分:3)
在AD应用程序中设置注销URL 属性。
答案 1 :(得分:1)
我假设您正在使用OpenIDConnect流并想要签出用户。为确保从Azure AD重定向到我们使用post_logout_redirect_uri
参数指定的网址,我们需要在Azure门户网站上的应用注册表的回复网址中注册。
之后,我们还需要确保用户成功登录Azure AD。例如,我们在注销用户之后登录用户。这次重定向应该是预期的。然后我们再次发送一个注销请求,然后这次重定向将无法工作,因为用户已经注销。
此外,无需通过OpenIdConnect流向client_id
提供end_session_endpoint
请求参数。有关此OpenIdConnect的更多详细信息,请参阅以下文档:
Authorize access to web applications using OpenID Connect and Azure Active Directory
答案 2 :(得分:0)
我也遇到了这个问题,对我有用的是:
https://login.windows.net/<tenant_id_of_your_app>/oauth2/logout?post_logout_redirect_uri=<logout_URL_of_your_app>/logout
答案 3 :(得分:0)
使用 Python、Flask 和 MSAL 2.0 我做了以下事情:
@app.route("/logout")
def logout():
logout_user()
if session.get("user"): # Used MS Login
# Wipe out user and its token cache from session
session.clear()
# Also logout from your tenant's web session
redirect(
Config.AUTHORITY
+ "/oauth2/v2.0/logout"
+ "?post_logout_redirect_uri="
+ url_for("login", _external=True, _scheme="https")
)
app.logger.info("Logging user out.")
return redirect(url_for("login"))
在 Azure 门户中配置我的端点如下:
环境变量是这样配置的
# Oauth - Azure Active Directory and MSAL
export CLIENT_SECRET=<your-client-secret>
export CLIENT_ID=<your-client-id>
export REDIRECT_PATH=/getAToken
export SESSION_TYPE=filesystem
export AUTHORITY=https://login.microsoftonline.com/common
export SCOPE=User.Read
export SESSION_TYPE=filesystem
config.py 文件
import os
from dotenv import load_dotenv
basedir = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(basedir, ".env"))
class Config(object):
### Info for MS Authentication ###
### As adapted from: https://github.com/Azure-Samples/ms-identity-python-webapp ###
CLIENT_SECRET = os.environ.get("CLIENT_SECRET")
# In your production app, Microsoft recommends you to use other ways to store your secret,
# such as KeyVault, or environment variable as described in Flask's documentation here:
# https://flask.palletsprojects.com/en/1.1.x/config/#configuring-from-environment-variables
# CLIENT_SECRET = os.getenv("CLIENT_SECRET")
# if not CLIENT_SECRET:
# raise ValueError("Need to define CLIENT_SECRET environment variable")
AUTHORITY = os.environ.get("AUTHORITY") # For multi-tenant app, else put tenant name
# AUTHORITY = "https://login.microsoftonline.com/Enter_the_Tenant_Name_Here"
CLIENT_ID = os.environ.get("CLIENT_ID") #
REDIRECT_PATH = os.environ.get(
"REDIRECT_PATH"
) # Used to form an absolute URL; must match to app's redirect_uri set in AAD
# You can find the proper permission names from this document
# https://docs.microsoft.com/en-us/graph/permissions-reference
SCOPE = [os.environ.get("SCOPE")] # Only need to read user profile for this app
SESSION_TYPE = os.environ.get(
"SESSION_TYPE"
) # Token cache will be stored in server-side session