我在项目中包含了一些代码来启用用户身份验证。它似乎使用FormsAuthentication
以及.NetCasAuthentication
。当用户想要登录时,我会将其重定向到保存了URL的外部页面
DotNetCasClient.CasAuthentication.FormsLoginUrl
,并且在成功登录尝试后,设置User.Identity
对象。到目前为止一切都很好。
现在,如何正确签署用户?
我试过
FormsAuthentication.SignOut()
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty), null);
但是当我向我的应用程序发送另一个请求时,它仍然可以在某个地方找到该用户的信息。
CasAuthentication是否保存到cookie?或者它更可能是在外部登录页面定义的某个独特位置?我可以选择重定向到相应的外部注销页面,但我不知道如何在不重定向到它并离开我的应用程序的情况下这样做,而且我不想这样做。
感谢阅读。
答案 0 :(得分:1)
我仍然不太确定是什么导致幻像退出,但我能够解决我遇到的问题。
我在我的应用程序的登录和注销页面中包含了一个iframe,其源(src)分别指向外部登录和注销页面。要在验证FormsAuthentication凭据后告诉CAS重定向到哪里,我必须在登录结束时追加iframe的src url查询字符串看起来像?TARGET=http%3a%2f%2fsome.url.aspx
(目标网址被转义。 '%3a'是冒号(:)的'url'编码,'%2f'是正斜杠(/))
所以,比方说,外部登录网址是https://www.externalsite.com/login
,我想在登录后重定向到我的欢迎页面http://www.mysite.com/welcome.aspx
,我的应用程序的登录页面iframe src需要
`https://www.externalsite.com/login?TARGET=http%3a%2f%2fwww.mysite.com%2fwelcome.aspx`
这样做之后,一切似乎都运转正常。
我找不到TARGET查询字符串的文档,但它似乎与here描述的'targetService'参数有关。