gpt4 book ai didi

.net - IdentityServer4 登出

转载 作者:行者123 更新时间:2023-12-03 23:55:29 27 4
gpt4 key购买 nike

我遇到了一个问题,我似乎无法让我的 Identity Server 注销以首先显示确认。我从github下载了IdentityServer4的源码,在Models文件夹中找到了参数:LogoutRequest.cs,ShowSignOutPrompt。除了在注销期间检查它之外,IdentityServer 中没有对它的引用。

在调试中,我看到它是错误的。我不知道应该在哪里设置,我已经检查了服务器端和客户端的客户端配置选项,以及服务器启动的选项。

我在客户端代码中找不到“ShowSignoutPrompt”实例(我目前使用的是 IdentityServer3 Owin Hybrid 客户端示例)。

这是代码流程:
我们在默认布局中有一个按钮,用于触发客户端的 AccountController.Signout():

public void Signout()
{
Request.GetOwinContext().Authentication.SignOut();
}

从那里,我不太确定如何,但它击中的下一点是 IdentityServer 的 AccountController.Logout(string logoutId)。该方法构建注销提示 View (使用 AccountServices.BuildLogoutViewModelAsync 中的检查)并将其返回到用户的浏览器。不将 ShowSignoutPrompt 设置为 false 的唯一方法是将 PostLogoutRedirectUri 设置为“/signout-callback-oidc”。我不知道为什么。

当用户在上面生成的 View 上单击"is"时,它会转到 IdSrvr 的 AccountController.Logout(LogoutInputModel 模型)。我正在尝试将该方法的最后一行更改为:
return View("LoggedOut", vm);

到:
return Redirect(vm.PostLogoutRedirectUri);

这里还有一个问题,即 PostRedirectUri 在这里为空,即使我在客户端配置中设置了它(嗯,就此而言,Identity Server 的客户端配置也有它)。

最佳答案

没有客户端属性来控制这一点。

注销客户端应用程序时调用 IdentityServer4 End Session Endpoint .

当客户端发送原始 id_token 时,可以绕过注销提示。
这作为 id_token_hint 参数传入。

此外,它指示注销请求是否已通过身份验证,因此不提示用户注销是安全的。
per ref

ShowSignoutPrompt 指示是否应根据传递给结束 session 端点的参数提示用户注销。
来源 PDF

注意 :
如果您使用的是 JavaScript OIDC-Client-JS库,'signoutRedirect' 方法将在内部进行检查,参见 _signoutStart method第 354 行,用于 id_token_hint 参数或用户 id_token。因此,如果您使用这个库来注销用户并想要强制退出屏幕,您将必须清除 user.id_token。

来自 _signoutStart() 的示例部分

_signoutStart(args = {}, navigator, navigatorParams = {}) {
...
var id_token = args.id_token_hint || user && user.id_token;
if (id_token) {
Log.debug("Setting id_token into signout request");
args.id_token_hint = id_token;
}
...
}

更新:

如果您使用的是 IdentityServer4 2.x 版,您可以使用新类 ClientProperty存储键值对。在这里,您可以创建一个“LogoffPromptRequired”键和一个值“true”,用于客户端或 IdentityServer 实现,以确定是否需要注销屏幕。

关于.net - IdentityServer4 登出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113792/

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