我想了解处理此身份验证场景的最佳实践。我有一个注册页面叫https://public.domain.com/#registration),注册完成后,我想对用户进行身份验证,并将其重定向到应用程序(即https://app.domain.com/)。我有另一台服务器,在那里我有身份验证方法、api控制器等(即https://api.domain.com/Token,https://api.domain.com/api/getOrders等)。
从注册页面(https://public.domain.com/#registration)我在打电话(https://api.domain.com/Token)以获得身份验证,并将其存储在sessionStorage["accessToken"]或localStorage["accessToken"]中。无论我将此令牌存储在哪里,它都不会在我将用户重定向到的其他域中可用(https://app.domain.com/)。
我的问题是:我必须通过querystring从https://public.domain.com/#registration到https://app.domain.com/Login?Token=xxxxxxxxxxx这样我就可以使用它将其存储在localStorage或sessionStorage中,并在中进行身份验证https://app.domain.com/?
如何在多个域中使用该令牌?这样做的最佳实践是什么?有什么大的安全风险吗?我已经用CORS设置了我的Api盒子,所以令牌端点可以在注册和应用服务器中访问。
我还想指出https://public.domain.com/#registration和https://app.domain.com/是单页应用程序,使用Durandal、BreezeJS、Knockout等(Hot Towel模板)。
这几乎回答了我的问题:跨域ASP.NET应用程序的单一登录(SSO)
亮点:
那么,如何在多个域之间共享身份验证cookie呢?好吧,绝对没有办法做到这一点。根本障碍HTTP协议的阻止您在不同的域,主要是出于安全原因。
ASP.NET中没有内置机制来实现Single在这两个不同的网站上登录。