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>()
我正在玩弄 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>()