2

在我的应用程序中,我已将Identity server 3openid-connect集成。 在我们的生产服务器上,我们的网站位于造成问题的逆向代理之后;反向代理与openid连接重定向

当用户登录并被身份服务器重定向时,我们的应用程序想要将用户重定向到其原始位置(带有AuthorizeAttribute的页面)。 这里的问题是用户被重定向到隐藏的url而不是reverse proxy使用的公共URL。

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

回答

3

经过长时间的搜寻后,这是修复:

的OWIN中间件UseOpenIdConnectAuthentication已在Options属性的属性Notifications。 This Notifications property has funcSecurityTokenValidated。在这个函数中你可以修改重定向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。