0

我正在尝试使用 IdentityServer3 对带有 owin 管道(无 mvc)的 asp.net webform 应用程序上的用户进行身份验证

所有示例都建议像 mvc 应用程序一样配置应用程序,但是当我尝试访问 webform 应用程序的受保护资源时,应用程序不会重定向到 IdentityServer 登录页面

这是我的客户端(网络表单)配置

[启动.cs]

app.UseCookieAuthentication(new CookieAuthenticationOptions { 
                AuthenticationMode = AuthenticationMode.Active,
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
                //LoginPath = new PathString ("/Account/Login")   //<--enabling this path property redirect me to a local login page but not to the external IdentityServer login page
            });



app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                { 
                    Authority = "https://localhost:44300/identity",     //<<--url of the identityServer
                    ClientId = "webform",
                    ClientSecret = "ciccio",
                    Scope = "openid profile roles",
                    RedirectUri = "https://localhost:44302/",           //<-- url of the client (to come back ofter the login) 
                    ResponseType = "id_token",
                    SignInAsAuthenticationType = "Cookies"
                });

我确定我忘记了什么

4

2 回答 2

1

看起来,您错过app.UseStageMarker(PipelineStage.Authenticate);了 Startup.cs 的底部。
原因是(根据文档):

Owin 中间件组件 (OMC) 在最新阶段运行,默认为 PreHandlerExecute。阶段标记用于使它们更早运行。

包括 cookie 映射和对注销的支持的完整示例在IdSrv 存储库中

发布,以防其他人仍然像我们最近所做的那样寻找相同问题的解决方案,发现这个问题没有答案

于 2018-03-14T15:34:55.700 回答
0

作为解决方法,我尝试了本文中建议的这些解决方案,但它们不起作用

不同域的登录页面

示例页面中的两种解决方案都强制将“残酷”重定向到 IdentityServer,但是这样做,IdentityServer 不会向您显示登录页面,因为执行的请求格式不正确

附加到查询字符串的“signin=xxxxxx”参数不存在合法登录请求所需的参数。

我也尝试使用 mvc 客户端,在这种情况下,对受保护资源(具有 Authorize 属性)的每个请求都以正确的方式重定向到 IdentityServer(用户应该重定向到登录页面的 url采用这种格式https://localhost:44300/identity/login?signin=4f7ee6677aec2d2aca6ebc40e4d13720),将“signin”参数附加到查询字符串中,这种行为不会在 webform 应用程序中发生(至少与mvc 应用程序)我确定缺少某些东西,例如“httpModule”,它拦截“http 401 未授权响应”并组成一个更正的 url 以重定向到 IdentityServer 的登录页面

原谅我的英语

于 2016-02-11T14:47:49.147 回答