gpt4 book ai didi

c# - 如何使用结束 session 端点 IdentityServer4 注销?

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:20 28 4
gpt4 key购买 nike

我尝试使用来自 IdentityServer4 文档的 GET 请求从我的 session 中注销。HttpResponseMessage 看起来像这样:

HttpResponseMessage res = await client.GetAsync($"connect/endsession?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}");

起初,我对 Uri 长度有疑问。当我发送请求时,方法捕获异常

Invalid URI: The Uri scheme is too long. 

为了解决这个问题,我试过像这样将参数发送到字符串中:

var parameters = $"?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}";
HttpResponseMessage res = await client.GetAsync("connect/endsession" + parameters );

同时在 Program.cs 中添加 MaxRequestLineSize,如下所示:

UseKestrel(options =>
{
options.Limits.MaxRequestLineSize = 20480;
})

也试过这种方式:https://stackoverflow.com/a/32457474/9541386但对我没有任何用处。

我已经尝试通过 Postman 发送此请求。请求已发送

http://localhost:5000/connect/endsession?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}

但在 IClientStore 接口(interface)的 FindClientByIdAsync 方法中,clientId 参数如下所示: enter image description here

但正常情况下会有Id。我看不到它之前发生了什么,因为它是第一个入口点。如何解决 Uri 长度和错误参数的问题?

最佳答案

问题很可能是查询参数中的无效字符:

?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}

在这种情况下,我怀疑字符串 postLogoutRedirectUri 包含字符 :,如果不转义则无效:%3A

对uri进行编码:

var encodedUri = System.Web.HttpUtility.UrlEncode(postLogoutRedirectUri);

并将其用作参数:

?id_token_hint={idTokenHint}&post_logout_redirect_uri={encodedUri}

虽然这可能会解决问题,但您为什么不使用 provided methods to signout ?例如:

//using Microsoft.AspNetCore.Authentication;
//using Microsoft.AspNetCore.Mvc;

// Remove cookie
await HttpContext.SignOutAsync("Cookies");
// Signout oidc
await HttpContext.SignOutAsync("oidc");

关于c# - 如何使用结束 session 端点 IdentityServer4 注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275966/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com