我使用Angular2为客户端构建Web应用程序,使用Symfony3作为服务器,就像一种REST API。 但我不知道如何在Angular和Symfony之间分享用户的会话ID。
我尝试在Symfony中存储会话,但会话没有停留,似乎没有遵循REST规则。
然后我尝试将会话存储在Angular中作为localStorage,但遇到了以下问题: 如何告诉Symfony这个会话?找到的唯一解决方案是在链接中将此会话作为GET参数发送,但我不喜欢这样。我认为这就像一个安全错误,它也会非常沉重,总是在每个路由中添加会话ID ...
由于
答案 0 :(得分:1)
我会研究JSON Web Tokens(https://jwt.io)作为cookie的更好替代方案(在像你这样的情况下)。
如果您仍想使用cookie,您可以随时在Symfony会话开始时设置cookie,并将每个请求发送到服务器。
你必须自己处理会话ID重新生成。
答案 1 :(得分:1)
正如Magd所说,你可以使用JWT。
基本上,JSON Web令牌(JWT)只不过是一个大的JSON字符串,它包含您想要放入的任何数据 - 比如用户的id或他们喜欢的颜色。但是,JSON经过加密签名和编码,以创建一个看起来根本不像JSON的新字符串。
例如,用户在Angular登录表单中输入其凭据。该数据将发送到REST API。如果凭据有效,REST API将返回JWT。 Angular应用程序(客户端)将令牌存储在本地存储中,并在每次请求时将其发送以进行身份验证。
要创建令牌认证系统,您可以使用Guard - Symfony核心安全系统的一部分。
您可以在以下网站找到更多信息: http://matkodjipalo.com/index.php/2016/08/18/symfony-rest-api-token-authentication/
或: https://knpuniversity.com/screencast/symfony-rest4/json-web-token#play
此外,您应该使用HTTPS。