azure-active-directory - 如何使用 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?)但是经过数小时的研究,我无法解决。
对此的任何帮助将不胜感激,谢谢。
解决方案
您可以使用如下所示的退出按钮,在 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>
推荐阅读
- java - java.lang.ClassNotFoundException:org.springframework.cloud.client.discovery.composite.reactive.ReactiveCompositeDiscoveryClientAutoConfig
- php - 有人能告诉我 DateTimeZone::getOffset PHP 函数是如何工作的吗?
- apache-kafka - 我们可以更新 kafka 0.10 中的消费者偏移量吗?
- robotframework - RobotFramework/RIDE 无法通过示例测试 - “未找到名称为 'Run ${sakura}' 的关键字。”
- azure - 如何使用逻辑应用程序将数组值插入表中
- docker - 使用 Google Cloud Build,我如何运行执行 docker 和 kubectl 命令的 Makefile?
- sql - 如何正确地将这个复杂的 JSON 转换为 SQL 表?
- angular - 我们可以创建 react-native + Angular 应用程序吗?是的,那怎么办?
- c# - 如何从 C# 中的匿名 select 语句返回多个值
- javascript - 我们可以在 firebase 的云功能中使用 async/await 吗?