我遇到的问题是我收到以下循环:
> http://example.com/authenticatedPage – > 302重定向到AD登录
>登录到AD页面HTTP 200.触发打开Azure AD链接到站点.
>链接到站点标识这是一个OWIN重定向并执行302重定向到http://example.com/authenticatedPage
>转到1.
我尝试了3种拦截OWIN重定向的方法,但似乎没有任何效果.
如果我通过浏览到https://example.com/开始会话,然后单击指向authenticatedPage的链接,然后登录按预期工作.即
>加载https://example.com/authenticatedPage – > 302重定向到AD
>登录AD – >加载https://example.com/
> 302重定向到https://example.com/authenticatedPage
无论如何要解决这个问题而不将整个网站标记为需要SSL吗?
问题是您的应用程序中的OIDC中间件设置的引荐来源.这是怎么回事:>在http://foo.bar输入您的应用程序并重定向到身份提供商
> IDP / AD根据配置的返回URI重定向到https://foo.bar
> Cookie由OIDC中间件设置,带有安全标志,因此仅适用于HTTPS
>中间件重定向到引用URL,即HTTP
> Cookie未在HTTP上设置,因此返回步骤1.
有多种解决方案,例如仅强制执行SSL,重载Authorize属性以及将CookieSecure标志设置为CookieSecureOption.Never(不要这样做).
我更喜欢的选项是将Referrer固定在中间件本身中:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { Authority = ... ClientId = ... RedirectUri = "https://foo.bar" ResponseType = "id_token", Scope = "openid profile", SignInAsAuthenticationType = "Cookies", // Deal with the returning tokens Notifications = new OpenIdConnectAuthenticationNotifications { AuthorizationCodeReceived = async n => { // Enforce the reference/redirect to be HTTPS var builder = new UriBuilder(n.AuthenticationTicket.Properties.RedirectUri); builder.Scheme = "https"; builder.Port = 443; n.AuthenticationTicket.Properties.RedirectUri = builder.ToString(); } } });
这样做是将Referrer URL上的HTTP重写为HTTPS.这样,如果用户在HTTP上输入应用程序,他将在使用后自动重定向到HTTPS版本.