Oauth 2.0 OpenID/OAuth2.0注销中PostLogoutRedirectUri的意义是什么?

Oauth 2.0 OpenID/OAuth2.0注销中PostLogoutRedirectUri的意义是什么?,oauth-2.0,identityserver4,openid-connect,logout,angular-auth-oidc-client,Oauth 2.0,Identityserver4,Openid Connect,Logout,Angular Auth Oidc Client,我一直在使用Identity Server 4.0作为我的OpenId连接提供程序。我可以在Identity Server中使用重定向URI和注销后重定向URI设置客户端。我还使用angular auth oidc客户端通过Identity server登录/注销 登录时,我的客户端库(angular auth oidc client)在调用授权端点时会传入配置中指定的正确Uri。当我尝试使用不正确的重定向Uri登录时,Identity Server会检查并验证客户端提供的Uri是否是该客户端可

我一直在使用Identity Server 4.0作为我的OpenId连接提供程序。我可以在Identity Server中使用重定向URI和注销后重定向URI设置客户端。我还使用angular auth oidc客户端通过Identity server登录/注销

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

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


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

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

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

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

  • 发送的post_logout_redirect_uri只有在伴随着id_token_提示并且与OAuth客户端的配置值相匹配时才会被接受。我相信OIDC会发送当前的id令牌,但值得检查一下您的浏览器工具中是否存在这种情况

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


请参阅有关如何工作的说明。

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

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

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

  • 发送的post_logout_redirect_uri只有在伴随着id_token_提示并且与OAuth客户端的配置值相匹配时才会被接受。我相信OIDC会发送当前的id令牌,但值得检查一下您的浏览器工具中是否存在这种情况

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


在我自己的应用程序中,我将其设置为客户端的/Signout回调oidcURL,如

PostLogoutRedirectUris = { "https://localhost:5001/signout-callback-oidc" },
/signout回调oidc路径在源代码中定义为:

//
///应用程序基本路径中的请求路径,用户代理从身份提供程序注销后将返回该路径。
///请参阅从中发布\u注销\u重定向\u urihttp://openid.net/specs/openid-connect-session-1_0.html#RedirectionAfterLogout.
/// 
公共路径字符串SignedOutCallbackPath{get;set;}

我希望这能给出一些澄清。

在我自己的应用程序中,我将其设置为客户端的/Signout回调oidcURL,如

PostLogoutRedirectUris = { "https://localhost:5001/signout-callback-oidc" },
/signout回调oidc路径在源代码中定义为:

//
///应用程序基本路径中的请求路径,用户代理从身份提供程序注销后将返回该路径。
///请参阅从中发布\u注销\u重定向\u urihttp://openid.net/specs/openid-connect-session-1_0.html#RedirectionAfterLogout.
/// 
公共路径字符串SignedOutCallbackPath{get;set;}
我希望这可以作出澄清