首页 > 解决方案 > 如何使用 AzureAD 和 Microsoft.Identity.Web 在 Blazor Server 中调用“SignOut”?

问题描述

我有一个使用 Microsoft.Identity.Web 将用户登录到 AzureAD 的 Blazor Server 应用程序 (.net5)。这部分一切都按预期工作 - 加载应用程序并自动获取“Microsoft Signin”对话框。AuthenticationStateTask 还将用户显示为“IsAuthenticated”。我的问题是尝试添加注销按钮。

我努力了:

<a href="https://login.microsoftonline.com/common/oauth2/v2.0/logout">Log out</a>

和:

<a href="https://login.microsoftonline.com/{domainID}/oauth2/logout">Log Out</a>

两者都将我带到 Microsoft“我们退出时请稍等”页面,唯一的区别是第一个选项询问“哪个帐户”要退出。在浏览器中按“返回”或再次手动转到站点地址,我将自动以以前的用户身份重新登录。如果我按“注销”然后手动转到:

/signout-oidc

我得到一个空白页(我理解这是正确的),但然后回到 Wep 应用程序,我被正确地要求再次登录 - 所以我的假设是回拨不是被自动调用的。

在我的 appsettings.json 我有:

"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"RemoteSignOutPath": "/signout-oidc",

以及域和租户等。

在 Azure Web 注册中,我在“前通道注销 URL”字段中有 /signout-oidc。

我一定是遗漏了一些东西(或调用了错误的 URL?)但是经过数小时的研究,我无法解决。

对此的任何帮助将不胜感激,谢谢。

标签: azure-active-directoryblazor-server-side

解决方案


您可以使用如下所示的退出按钮,在 Web 应用程序中选择退出按钮会触发控制器SignOut上的操作。AccountController

<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>

有关更多详细信息,请参阅此文档 - https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-sign-user-sign-in?tabs=aspnetcore#sign -出去

更新:

在 Blazor 中,您可以打开LoginDisplay.razor并更新如下代码。

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <a href="MicrosoftIdentity/Account/SignOut">Log out</a>
    </Authorized>
    <NotAuthorized>
        <a href="MicrosoftIdentity/Account/SignIn">Log in</a>
    </NotAuthorized>
</AuthorizeView>

参考 - https://developer.microsoft.com/en-us/microsoft-365/blogs/how-to-build-a-blazor-web-app-with-azure-active-directory-authentication-and-microsoft-图形/

示例 - https://github.com/jpda/msiddev-blazor-aad-graph


推荐阅读