Open Id/OAuth2.0 注销中的 PostLogoutRedirectUri 有什么意义?
What is the point of PostLogoutRedirectUri in Open Id/OAuth2.0 logout?
我一直在使用 Identity Server 4.0 作为我的 OpenId Connect 提供商。我可以在 Identity Server 中使用重定向 Uris 和 Post 注销重定向 Uris 设置客户端。我也一直在通过身份服务器使用 angular-auth-oidc-client 到 login/logout。
登录时,我的客户端库 (angular-auth-oidc-client) 在调用授权端点时确实传入了配置中指定的正确 Uri。当我尝试使用不正确的重定向 Uri 登录时,Identity Server 检查并验证客户端提供的 Uri 是否是该客户端可接受的 Uri 之一,如果不是(如预期的那样)则显示错误。
关于注销,none 似乎是内置的。我的客户端库在调用注销端点时不发送 PostLogoutRedirectUri。 Identity Server 的注销示例代码不排除要传入的任何 URI。它的示例代码只是从数据库中获取 Post 注销重定向 Uri 值,并在注销页面上创建一个 link。示例代码不仅不允许用户为注销指定重定向 Uri,而且它不做任何检查甚至不做重定向(授予它唯一的示例代码,我可以更改它)。我希望我的客户端库在成功注销后传递 Uri,并且身份服务器在成功注销后重定向到 Uri,只要它是客户端的“已批准”Uris 之一。
我的问题是: PostLogoutRedirectUri 的意义何在?我使用的 Identity Server 和 OIDC 客户端库都没有用它做任何有用的事情。对于用于将此 Uri 传递给 Identity Server 的查询字符串参数的名称,似乎甚至没有商定的约定。然而,Identity Server 和 angular 客户端库似乎都支持它。那么这件事有什么意义呢?以后会添加或充实它吗?我是否遗漏了一些描述其用途和使用方法的文档?
这是一个标准草案,图书馆和供应商之间的支持有所不同,但这里有一个摘要:
客户端使用 post 注销重定向 URI 以受控方式注销,通常重定向到应用程序页面,为用户提供 link 以再次登录
一个客户端可能有多个 post_logout_redirect_uri 并根据运行时条件决定使用哪个
发送的 post_logout_redirect_uri 只有在伴随 id_token_hint 并且与 OAuth 客户端的配置值匹配时才会被接受。我相信 OIDC 会发送当前的 ID 令牌,但值得检查一下您的浏览器工具是否正在发生这种情况。
如果未发送 post_logout_redirect_uri,则授权服务器可能会使用配置的默认配置
请参阅 official IETF docs 了解其工作原理。
在我自己的应用中,我设置为客户端的/Signout-callback-oidc URL,比如
PostLogoutRedirectUris = { "https://localhost:5001/signout-callback-oidc" },
/signout-callback-oidc路径在源代码中定义为here:
/// <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; }
我希望这能给一些澄清。
我一直在使用 Identity Server 4.0 作为我的 OpenId Connect 提供商。我可以在 Identity Server 中使用重定向 Uris 和 Post 注销重定向 Uris 设置客户端。我也一直在通过身份服务器使用 angular-auth-oidc-client 到 login/logout。
登录时,我的客户端库 (angular-auth-oidc-client) 在调用授权端点时确实传入了配置中指定的正确 Uri。当我尝试使用不正确的重定向 Uri 登录时,Identity Server 检查并验证客户端提供的 Uri 是否是该客户端可接受的 Uri 之一,如果不是(如预期的那样)则显示错误。
关于注销,none 似乎是内置的。我的客户端库在调用注销端点时不发送 PostLogoutRedirectUri。 Identity Server 的注销示例代码不排除要传入的任何 URI。它的示例代码只是从数据库中获取 Post 注销重定向 Uri 值,并在注销页面上创建一个 link。示例代码不仅不允许用户为注销指定重定向 Uri,而且它不做任何检查甚至不做重定向(授予它唯一的示例代码,我可以更改它)。我希望我的客户端库在成功注销后传递 Uri,并且身份服务器在成功注销后重定向到 Uri,只要它是客户端的“已批准”Uris 之一。
我的问题是: PostLogoutRedirectUri 的意义何在?我使用的 Identity Server 和 OIDC 客户端库都没有用它做任何有用的事情。对于用于将此 Uri 传递给 Identity Server 的查询字符串参数的名称,似乎甚至没有商定的约定。然而,Identity Server 和 angular 客户端库似乎都支持它。那么这件事有什么意义呢?以后会添加或充实它吗?我是否遗漏了一些描述其用途和使用方法的文档?
这是一个标准草案,图书馆和供应商之间的支持有所不同,但这里有一个摘要:
客户端使用 post 注销重定向 URI 以受控方式注销,通常重定向到应用程序页面,为用户提供 link 以再次登录
一个客户端可能有多个 post_logout_redirect_uri 并根据运行时条件决定使用哪个
发送的 post_logout_redirect_uri 只有在伴随 id_token_hint 并且与 OAuth 客户端的配置值匹配时才会被接受。我相信 OIDC 会发送当前的 ID 令牌,但值得检查一下您的浏览器工具是否正在发生这种情况。
如果未发送 post_logout_redirect_uri,则授权服务器可能会使用配置的默认配置
请参阅 official IETF docs 了解其工作原理。
在我自己的应用中,我设置为客户端的/Signout-callback-oidc URL,比如
PostLogoutRedirectUris = { "https://localhost:5001/signout-callback-oidc" },
/signout-callback-oidc路径在源代码中定义为here:
/// <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; }
我希望这能给一些澄清。