C# 在Identityserver登录页中获取请求Uri

C# 在Identityserver登录页中获取请求Uri,c#,asp.net-mvc,owin,openid,identityserver3,C#,Asp.net Mvc,Owin,Openid,Identityserver3,我对Identityserver和owin非常陌生。这是我的问题。 我使用identityserver3作为身份验证服务创建了一个asp.net MVC应用程序。 我想访问identity server登录中的请求URI。我已经使用MVC视图定制了登录页面(通过使用IdentityServer3.Samples) 这就是流程。以下URL需要身份验证才能继续https://www.myapp.com/customer/profile 当有人导航到该URL时,它将自动重定向到身份登录页面https:

我对Identityserver和owin非常陌生。这是我的问题。 我使用identityserver3作为身份验证服务创建了一个asp.net MVC应用程序。 我想访问identity server登录中的请求URI。我已经使用MVC视图定制了登录页面(通过使用IdentityServer3.Samples)

这就是流程。以下URL需要身份验证才能继续<代码>https://www.myapp.com/customer/profile 当有人导航到该URL时,它将自动重定向到身份登录页面
https://www.myapp.com/identity/login?signin=2207991967207c8e306a8c08b3abd3b8
。提供正确的用户凭据后,它将正确重定向回请求URL,该URL已由identityserver处理


在我的例子中,我在同一个identityserver登录页面中有另一个链接,它应该重定向到我自己的链接,请求URL
https://www.myapp.com/customer/profile
作为查询字符串参数。我怎样才能做到这一点?基本上,我想在登录页面中获取请求URL。

您应该能够通过

var env = Request.GetOwinContext().Environment;
var msg = env.GetSignInMessage(id); // id from querystring
var returnUrl = msg.ReturnUrl;

(摘自回购示例)

您必须覆盖客户端上的
AuthorizationCodeReceived
事件的处理程序:

AuthorizationCodeReceived = async n =>{
    n.AuthenticationTicket.Properties.RedirectUri = /*your custom logic here*/;
}

这个问题似乎是一个变量

不,它在那里不起作用,我得到的不是我所期望的。就像
https://identity.codefox.com/identity/connect/authorize?client_id=app_central&redirect_uri=https%3A%2F%2Fcentral.codefox.com&response_mode=form_post&response_type=code%20id_token&scope=openid%20profile%20read%20write%20offline_access&state=OpenIdConnect.AuthenticationProperties%3DktxDeOqwyWvZhx1JKURF0e8yAMBpeU36_qMNj-Ib-hFNOF6HmN0rUPh3PjnRTQRHY1KM00WOKEOQUPQONE6QUEQU6GOTSGPRSGPRTBG7BUTHYSKIUKOUQUAKQU5BEYEMSYWHVGA000 DUOE4AKI1PNVEDAWQQWPVKLLS < /代码>身份服务器不能完全知道用户最初请求的是什么,因为这是OAuth流中的几个步骤。考虑这个例子:*导航到某个URL *客户端Web应用程序:未经授权>重定向到identityserver授权终结点。客户端应用程序将记住原始URL,但只有它知道。*IdentityServer:未验证->重定向到登录*(用户登录)*IdentityServer:重定向回授权端点*(用户授权客户端应用)*IdentityServer:重定向回客户端的oauth回调url。*客户端web应用程序:将用户重定向回原始url。因此,基本上,一旦用户获得授权,知道如何处理用户是客户端应用程序的责任,而不是oauth提供商(identityserver)。客户机发送给oauth提供程序的唯一内容是它希望访问的范围(即profile等)和“state”参数。然后,客户端可能会使用该状态参数来了解用户最初请求的内容,但这对客户端应用程序来说是私有的,可能只是一个随机字符串。谢谢您的解释。对不起,我对这个还不熟悉。有没有其他方法可以做到这一点。至少在客户端应用程序中。