我一直使用 Identity Server 4.0 作为我的 OpenId Connect 提供商。我可以使用重定向 Uris 和注销后重定向 Uris 在 Identity Server 中设置客户端。我还一直在使用 angular-auth-oidc-client 通过身份服务器登录/注销。
登录时,我的客户端库(angular-auth-oidc-client)在调用授权端点时确实会传入配置中指定的正确 Uri。当我尝试使用不正确的重定向 Uri 登录时,Identity Server 会检查并验证客户端提供的 Uri 是否是该客户端可接受的 Uri 之一,如果不是(如预期),则会显示错误。
说到注销,似乎都没有内置。我的客户端库在调用注销端点时不发送 PostLogoutRedirectUri。 Identity Server 的注销示例代码不排除传入的任何 URI。它的示例代码只是从数据库获取注销后重定向 Uri 值,并在注销页面上创建一个链接。示例代码不仅不允许用户指定注销的重定向 Uri,而且不执行任何检查,甚至不执行重定向(授予其唯一的示例代码,我可以更改它)。我希望我的客户端库能够传递 Uri,身份服务器在成功注销后重定向到该 Uri,只要它是客户端“批准的”Uri 之一。
我的问题是:PostLogoutRedirectUri 的意义何在?我使用的 Identity Server 和 OIDC 客户端库都没有做任何有用的事情。对于用于将此 Uri 传递到 Identity Server 的查询字符串参数的名称,似乎甚至没有达成一致的约定。然而,Identity Server 和 Angular 客户端库似乎都对其有一些支持。那么这件事有什么意义呢?是以后会添加或充实的东西吗?我是否错过了一些描述其用途以及如何使用它的文档?
最佳答案
这是一个标准草案,库和供应商之间的支持有所不同,但这里有一个摘要:
客户端使用注销后重定向 URI 以受控方式注销,通常会重定向到为用户提供再次登录链接的应用程序页面
客户端可能有多个 post_logout_redirect_uri,并根据运行时条件决定使用哪个
发送的 post_logout_redirect_uri 仅当伴随着 id_token_hint 且与 OAuth 客户端的配置值匹配时才会被接受。我相信 OIDC 会发送当前的 id token ,但值得检查一下您的浏览器工具中是否发生了这种情况。
如果未发送 post_logout_redirect_uri,则授权服务器可能会使用默认配置的配置
请参阅official IETF docs关于这是如何工作的。
关于oauth-2.0 - Open Id/OAuth2.0注销中的PostLogoutRedirectUri有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67322449/