C# 带openid连接重定向的反向代理

C# 带openid连接重定向的反向代理,c#,asp.net-mvc,reverse-proxy,identityserver3,openid-connect,C#,Asp.net Mvc,Reverse Proxy,Identityserver3,Openid Connect,在我的应用程序中,我集成了Identity server 3和openid connect。 在我们的生产服务器上,我们的网站背后有一个反向代理,这导致了问题 当用户登录并被identity server重定向回时,我们的应用程序希望将用户重定向到其原始位置(具有authorized属性的页面)。 这里的问题是,用户被重定向到隐藏的url,而不是反向代理所使用的公共url 如何将用户重定向到公共url?经过长时间搜索后,这是修复方法: OWIN中间件UseOpenIdConnectAuthent

在我的应用程序中,我集成了
Identity server 3
openid connect
。 在我们的生产服务器上,我们的网站背后有一个反向代理,这导致了问题

当用户登录并被identity server重定向回时,我们的应用程序希望将用户重定向到其原始位置(具有
authorized属性的页面)。
这里的问题是,用户被重定向到隐藏的url,而不是
反向代理所使用的公共url


如何将用户重定向到公共url?

经过长时间搜索后,这是修复方法:

OWIN中间件
UseOpenIdConnectAuthentication
Options
属性中有一个属性
Notifications
。 此
Notifications
属性具有
func
SecurityTokenValidated
。在此函数中,您可以修改重定向Uri

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
    Authority = "https://idp.io",
    ClientId = "clientid",
    RedirectUri = "https://mywebsite.io",
    ResponseType = "code id_token token",
    Scope = "openid profile",
    SignInAsAuthenticationType = "Cookies",
    UseTokenLifetime = false,
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        SecurityTokenValidated = notification =>
        {
            notification.AuthenticationTicket.Properties.RedirectUri = RewriteToPublicOrigin(notification.AuthenticationTicket.Properties.RedirectUri);
            return Task.CompletedTask;
        }
    }
});
这是将url重写为公共来源的函数:

private static string RewriteToPublicOrigin(string originalUrl)
{
    var publicOrigin = ConfigurationManager.AppSettings["app:identityServer.PublicOrigin"];
    if (!string.IsNullOrEmpty(publicOrigin))
    {
        var uriBuilder = new UriBuilder(originalUrl);
        var publicOriginUri = new Uri(publicOrigin);
        uriBuilder.Host = publicOriginUri.Host;
        uriBuilder.Scheme = publicOriginUri.Scheme;
        uriBuilder.Port = publicOriginUri.Port;
        var newUrl = uriBuilder.Uri.AbsoluteUri;

        return newUrl;
    }

    return originalUrl;
}
现在,
OpenIdConnect
将用户重定向到公共url,而不是非公共Web服务器url