Azure AD注销URL未重定向

时间:2017-08-29 09:23:12

标签: azure azure-active-directory adal

我正在构建以下网址

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 /其他状态在我执行开发/测试周期时无法重置。有了新的浏览器,它可以工作。当它正常工作时,退出屏幕上会出现类似“我们退出时暂停”的内容,然后重定向,当它无法正常工作时,屏幕显示“您已退出,请关闭浏览器”

4 个答案:

答案 0 :(得分:3)

在AD应用程序中设置注销URL 属性。

  1. 登录AAD admin center portal
  2. 转到应用注册,如图所示 enter image description here
  3. 选择您的AD应用程序
  4. 转到“属性”
  5. 更新您想要的应用程序注销重定向网址,如图所示 enter image description here
  6. 保存

答案 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)

我也遇到了这个问题,对我有用的是:

  1. 我在属性中添加了注销URL,并在其中添加了回复URL。
  2. 注销按钮具有以下href:
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 门户中配置我的端点如下:

endpoints on Azure Portal

环境变量是这样配置的

# 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