IdentityServer4 - 如何从 IdentityServer 注销 Blazor Webassembly 客户端

IdentityServer4 - How to Logout Blazor Webassembly Client from IdentityServer

我正在玩弄 Blazor WASM 和 IdentityServer4。 Login/Logut 从客户端调用的流程都运行良好。在此处找到的二手 Microsoft 文档 Microsofts Docs

IdentityServer4 作为单独的微服务以及 Blazor WASM 应用程序托管 - 两个独立的项目。

现在我面临从 IdentiyServer4 注销的问题。从 IdentityServer4 UI 调用注销不会从 Blazor WASM 应用程序注销用户。我已经读过这篇解释 signout IdentityServer4

"oidc": {
"Authority": "http://localhost:8010/",
"ClientId": "demoportal.blazor",
"DefaultScopes": [
  "openid",
  "profile"
],
"PostLogoutRedirectUri": "http://localhost:8070/authentication/logout-callback",
"RedirectUri": "http://localhost:8070/authentication/login-callback",
"ResponseType": "code"

}

到目前为止我还没有找到任何可以实现目标的东西。根据我的理解,它必须用作 oidc 连接会话管理,而不是前端或后端通道策略。但是我在微软网站上找不到任何有用的文档。

经过大量阅读,我找到了答案。

Microsoft 在此处描述了 SPA 问题:Microsoft Handle-Token-Request-Errors

这些指示我要在我的基础组件上实现如下内容:

 protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();

        var user = (await authenticationStateTask).User;
        if (user.Identity.IsAuthenticated)
        {
            var tokenResult = await AccessTokenProvider.RequestAccessToken();
            if(tokenResult.Status == AccessTokenResultStatus.RequiresRedirect)
            {
                NavigationManager.NavigateTo(tokenResult.RedirectUrl);
            }
        }
    }

它就像一个魅力。

顺便说一下,在配置 HttpClient 时不要忘记包含令牌。

services.AddHttpClient<YOURSERVICEHERE>()
        .AddHttpMessageHandler(sp =>
        {
            var handler = sp.GetService<AuthorizationMessageHandler>()
                            .ConfigureHandler(
                                authorizedUrls: new[] { "URI here" },
                                scopes: new[] { "your scope here" }); 
            return handler;
        })
        .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>()