asp.net-core - IdentityServer4如何处理returnUrl

标签 asp.net-core identityserver4

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

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

那个returnUrl 似乎被用于很多事情,比如检索授权上下文:

await _interaction.GetAuthorizationContextAsync(returnUrl);

我的第一个问题是:

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

第二个问题是:

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

感谢您的宝贵时间!

编辑:

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

RedirectUris = {"http://localhost:44349" + "/signin-oidc"}

这是当我启动客户端应用程序时 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"

似乎要使用 await _interaction.GetAuthorizationContextAsync(returnUrl); 检索授权上下文,returnUrl 必须是带有 "/connect/authorize/callback?..."的整个 url

最佳答案

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

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

关于asp.net-core - IdentityServer4如何处理returnUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61348436/

相关文章:

c# - 使用 ASP.Net vNext 发送邮件

ssl - Azure App Service 证书 (dev) 问题上的身份服务器 4 部署

asp.net-core - IdentityServer4 RequestedClaimTypes 为空

asp.net-core - ASP.NET Core 项目上的 WebAPI 和 IdentityServer

asp.net-core - IdentityServer 中的 Cookie 中间件和 token 生命周期

unit-testing - 如何将单元测试项目添加到我现有的 asp.net core 项目中?

asp.net-core - 使用 dotnet pack 包含所有依赖项

c# - Blazor Azure B2C 独立版未在请求中发送授权 header (JWT)

angular - JWT 和防伪 token

asp.net-core - 将 Asp.net Core Identity 添加到使用 Identity Server 保护的 API