【发布时间】:2019-11-18 02:56:51
【问题描述】:
有没有办法使用 IdentityServer4 执行单点注销仅限客户端?使用 endsession 端点为客户端和 IdentityServer 执行单点注销没有问题。然而,我想做的是提供一种方法来强制所有客户端在下一次请求时重新进行身份验证(以获得新的声明),但不强制用户重新输入凭据。
用例是让用户编辑存储在声明中的个人资料信息。例如,他们的名字。当用户提交对此信息的更改时,需要让所有其他客户知道他们当前拥有的声明不再有效。这可以通过完全退出用户来实现,但是用户必须重新输入他们的 ID 和密码。
看流程,我想我要做的是直接执行内部EndSessionCallbackEndpoint,而不删除IdentityServer本身的身份验证cookie。
【问题讨论】:
-
如果您查看快速入门,idsrv 主机只是一个 asp.net 应用程序,应该明确调用它的注销。您可以跳过该步骤,但继续注销视图。理论上应该有效。
-
谢谢,@d_f,这就是我最终做的事情(见下文),但它对我来说只是“闻起来”不对劲。似乎应该有一种方法可以在对
endsession端点的调用中表达这种缩进,而不是通过检测魔术 URL。 -
而不是真正“闻起来”的“魔术网址”,因为它使用实体来实现其并非针对的目的,我会添加一个特殊的“魔术”参数。几乎一样,但气味少得多,恕我直言
-
不过,我想这是我的问题:如何将该参数传递给 Logout 方法?据我所知,
endsession端点仅将注销 id 转发给GET Logout方法。 -
好吧,目前
EndSessionRequestValidator不像TokenRequestValidator和ValidatedEndSessionRequest一样没有任何扩展点,所以唯一的替代方案就是使用state参数而不重写所有内容。根据规范,它不假设任何验证,应按原样保留并发送回客户端。不知道气味会不会好很多,但可能有点:)
标签: identityserver4