2015-12-16 179 views
6

我有两个应用程序(一个.NET和其他Angular SPA(.NET中的Web服务))具有相同的域名,我需要为这两个应用程序启用SSO。 config具有相同的机器密钥,并且它们启用了表单身份验证模式。C#Forms身份验证.ASPXAUTH Cookie的SSO

我登录到.NET站点,在iframe中呈现角度站点。当打开iframe时,API调用包含.ASPXAUTH cookie请求标题但HttpContext.User.Identity.Authenticated设置为false,因此它返回404并重定向到iframe中角度站点的登录页面。

auth cookie是HttpOnly,因此角度无法读取它但是si如果cookie是在请求头中设置的,则API(.NET)方法应将其视为已认证,而不是。我错过了什么?

+0

你是否对这两个应用程序使用相同的auth cookie名称? – AMember

+0

是的,它的.ASPXAUTH – Dave

+1

我会开始在API请求上检查'FormsAuthentication.Decrypt(HttpContext.Request.Cookies [FormsAuthentication.FormsCookieName] .Value)',以便您可以确保传递的值可以被解密并包含有效的用户标识符可以使用API​​ – Lanorkin

回答

2

有一些信息可能无法正确回答这个问题,但我认为这与相同的原产地政策有关。您必须明确设置iFrame的来源,以便您的Cookie不被识别为跨站点请求。因此不会被ASP.net应用。您的原始http标头必须设置为有效的来源和引荐来源。

请再看看这个question。它简要解释了同源政策。