IdentityServer4如何处理returnUrl

j0w*_*j0w 6 asp.net-core identityserver4

我们的高级开发人员最近离开了我们,我正试图游进 IdentityServer 的海洋。

有几件事我不明白,也找不到相关信息。例如,当您运行客户端应用程序时,它会被重定向到IdentityServer/Account/Login名为 的参数returnUrl

returnUrl似乎用于很多事情,例如使用以下命令检索授权上下文:

await _interaction.GetAuthorizationContextAsync(returnUrl);
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是:

returnUrl 从哪里来?它是如何/在哪里创建的?

第二个问题是:

登录后是否可以将其存储在客户端应用程序中的某个位置?我的意思是,在客户端应用程序中有一个点,我们必须发送邮件来创建新帐户。这些邮件会在 IdentityServer 的“注册”页面中重定向新用户。我想要做的是在此处使用 returnUrl 将新用户重定向到正确的客户端应用程序。

谢谢你的时间 !

编辑 :

这是我的客户端(在 IdentityServer 中)中设置的返回 url:

RedirectUris = {"http://localhost:44349" + "/signin-oidc"}
Run Code Online (Sandbox Code Playgroud)

这是当我启动客户端应用程序时 IdentityServer 中的 Login 方法接收到的 returnUrl

"/connect/authorize/callback?client_id=MyApplication_Web&redirect_uri=http%3A%2F%2Flocalhost%3A44349%2Fsignin-oidc&response_type=code%20id_token&scope=openid%20offline_access%20roles%20Cri_Identity_Serveur_Api.Full_Access&response_mode=form_post&nonce=637230882720491348.YmQzODA4ZTQtNDczZS00OWYwLWFmNmEtYjA2NmQ3YmIwZjg2YzdiODk4ZDYtMTU1YS00ZTM0LWE0MGEtNDVjOWNkZWFiYTM1&state=CfDJ8Ly2XCz96vdGkR4YQuJ4jeE-v9P4l1W7fLWpJcCGZpt1rMpXyWqEGdnaeRZfiZy4M4Z79LcixUbo06zImhsxwbgyV4hK82qmn0mI6wkrxwraT1tH3XNCdSXCfUJqwk_hZguMSwspZDEN6r1WxnZsU9kT8MHrb9qpzsMOMzsotVzToEjgMtxIeoRfqFSoK8ZfUXBkSw__qxVyIe1lCs96-I--ufZSyO2pBe2kfau-ah7eR5-9oopxX6x1k0tzFHAk6Y3_jMqGysES_GmmfeUJvXXFIR35Rc-IaxU1igswmL2h1IUS-0DQ98Tv_Gf3hirnS87SU87aSJhajgn2YmARXWc&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=5.3.0.0"
Run Code Online (Sandbox Code Playgroud)

看来要使用await _interaction.GetAuthorizationContextAsync(returnUrl);returnUrl 检索授权上下文必须是整个 url"/connect/authorize/callback?..."

mac*_*kie 9

不幸的是,Martin 的答案是不正确的 -returnUrl在本例中是客户端最初请求的授权端点 URL。如果用户未经过身份验证,则该端点将重定向到您指定的登录 UI 端点并包含此参数。GetAuthorizationContextAsync()只需分析该 URL,如果它与授权端点 URL 的签名匹配,那么它将解析、验证并返回一个代表该原始请求的对象。然后,您可以根据该信息自定义登录流程(例如,显示您正在登录的客户端的名称或限制可用的社交登录方法或任意数量的其他内容)。

可以将此 URL 包含在您的注册流程中,但我个人更喜欢基于一次性代码的电子邮件验证流程,这意味着用户不会丢失上下文,例如登录本机移动应用程序并且也不需要他们注册的设备上的电子邮件客户端 - 例如无法访问其工作电子邮件帐户的手机。不过每个人的要求都不同。