Blazor 服务器 - KeyCloak 注销 - 缺少参数:id_token_hint

问题描述 投票:0回答:1

我有一个与 KeyCloak (V26) 集成的 Blazor Server Web 应用程序 (.Net 9) 用于身份验证。应用认证流程:

  • 未授权访问(角色授权)或点击登录,重定向至KeyCloak登录页面。
  • 成功登录后,KeyCloak 会重定向到主 Blazor 应用程序。

对于注销,预期行为是重定向到 KeyCloak、启动注销并重定向回 Blazor 应用主页。相反,在注销时,Blazor 应用程序会重定向到 KeyCloak,并且我收到“缺少参数:id_token_hint”错误。

Blazor 应用程序 - 注销代码:

@page "/logout"
@using Microsoft.AspNetCore.Authentication
@using Microsoft.AspNetCore.Authentication.Cookies
@using Microsoft.AspNetCore.Authentication.OpenIdConnect
@using Microsoft.AspNetCore.Identity
@inject IConfiguration Configuration

<PageTitle>Log Out</PageTitle>


@code {

    [CascadingParameter]
    private HttpContext HttpContext { get; set; } = default!;

    protected override async Task OnInitializedAsync()
    {
        if (HttpMethods.IsGet(HttpContext.Request.Method))
        {
            
            // sign-out from the default authentication scheme
            await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
                {                    
                   RedirectUri = "/"
                });

            // sign-out from the cookie authentication scheme
            await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
        }
    }
}

KeyCloak - 注销错误

enter image description here

根据我的调查,客户端 Id 或 Id_Token_Hint 需要在注销 URI 中传递。我手动(在浏览器中)在注销 URI 查询字符串中添加了客户端 ID,它提供了一个单击“注销”的选项,但我不喜欢这个选项。如何获取和设置 Id_Token_Hint,以便发生注销并重定向到 Blazor 应用程序主页?请帮忙。

keycloak blazor-server-side
1个回答
0
投票

如果您使用

Microsoft.AspNetCore.Authentication.OpenIdConnect
,则需要启用SaveTokens。

builder.Services.AddAuthentication(...)
    .AddCookie()
    .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
    {
        ...
        options.SaveTokens = true;   //important  to get idtoken      or will report missing id_token_hint
    });

© www.soinside.com 2019 - 2024. All rights reserved.