我尝试了很多选项,这是我最后的选择,看看社区成员是否有任何想法。
我有.NET MVC 5应用程序,其中我使用过滤器强制在每个不安全的请求上使用HTTPS。
以下是该方案:
以上情况完美无缺。但问题是如果我使用https说https://portal.mywebsite.com访问同一个应用程序,则会失败。确切地说,它无法在服务器上检索ExternalIdentity(ExternalCookie)。
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var externalIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
if (externalIdentity == null)
{
throw(new Exception("Could not get the external identity. Please check your Auth0 configuration settings and ensure that " +
"you configured UseCookieAuthentication and UseExternalSignInCookie in the OWIN Startup class. " +
"Also make sure you are not calling setting the callbackOnLocationHash option on the JavaScript login widget."));
}
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, CreateIdentity(externalIdentity));
return RedirectToLocal(returnUrl);
}
此外,在我的测试环境中使用https访问应用程序仍然有效,而不是生产环境。
我的所有Web应用程序都作为Azure WebRoles托管。
我试过Fiddler观察工作和非工作之间的请求,看看我是否能找到任何有用的信息来识别问题但是没有成功。
我可以尝试帮助我缩小原因的任何想法或想法吗?
提前致谢!
答案 0 :(得分:1)
Microsoft的System.Web Owin实现中存在一个错误。临时解决方案在github.com/KentorIT/owin-cookie-saver
处理有人遇到同样的问题.AspNetApplicationCookie and ASP.NET_SessionId not created