0

我一直使用 Identity Server 4.0 作为我的 OpenId Connect 提供者。我可以使用 Redirect Uris 和 Post Logout Redirect Uris 在 Identity Server 中设置客户端。我也一直在使用 angular-auth-oidc-client 通过身份服务器登录/注销。

登录时,我的客户端库(angular-auth-oidc-client)在调用授权端点时确实传入了配置中指定的正确 Uri。当我尝试使用不正确的重定向 Uri 登录时,Identity Server 会检查并验证客户端提供的 Uri 是该客户端接受的 Uri 之一,如果不是(如预期的那样)则显示错误。

当谈到注销时,似乎没有内置。我的客户端库在调用注销端点时不发送 PostLogoutRedirectUri。Identity Server 用于注销的示例代码不包括要传入的任何 URI。它的示例代码只是从数据库中获取 Post Logout Redirect Uri 值并在注销页面上创建一个链接。示例代码不仅不允许用户为注销指定重定向 Uri,而且它不做任何检查,甚至不做重定向(授予它唯一的示例代码,我可以更改它)。我希望我的客户端库在成功注销后传递 Uri,并且身份服务器重定向到 Uri,只要它是客户端的“批准”Uri 之一。

我的问题是: PostLogoutRedirectUri 的意义何在?我使用的 Identity Server 和 OIDC 客户端库都没有做任何有用的事情。对于用于将此 Uri 传递给 Identity Server 的查询字符串参数的名称,似乎甚至没有达成一致的约定。然而,Identity Server 和 Angular 客户端库似乎都支持它。那么这件事有什么意义呢?是以后会添加或充实的东西吗?我是否错过了一些描述其用途和使用方法的文档?

4

2 回答 2

1

这是一个标准草案,支持在库和供应商之间有所不同,但这里有一个摘要:

  • 客户端使用注销后重定向 URI 以受控方式注销,通常重定向到为用户提供再次登录链接的应用程序页面

  • 一个客户端可能有多个 post_logout_redirect_uri 并根据运行时条件决定使用哪个

  • 发送的 post_logout_redirect_uri 仅在伴随 id_token_hint 并且与针对 OAuth 客户端的配置值匹配时才会被兑现。我相信 OIDC 会发送当前的 id 令牌,但值得检查这是否发生在您的浏览器工具中。

  • 如果未发送 post_logout_redirect_uri,则授权服务器可以使用配置的默认值

请参阅官方 IETF 文档,了解这是如何工作的。

于 2021-04-29T18:19:10.363 回答
1

在我自己的应用程序中,我将其设置为客户端的/Signout-callback-oidc URL,例如

PostLogoutRedirectUris = { "https://localhost:5001/signout-callback-oidc" },

/ signout-callback-oidc路径源代码中定义如下:

/// <summary>
/// The request path within the application's base path where the user agent will be returned after sign out from the identity provider.
/// See post_logout_redirect_uri from http://openid.net/specs/openid-connect-session-1_0.html#RedirectionAfterLogout.
/// </summary>
public PathString SignedOutCallbackPath { get; set; }

我希望这可以给出一些澄清。

于 2021-04-29T18:23:20.173 回答