使用Angularjs进行身份验证

时间:2013-12-26 19:28:39

标签: angularjs authentication cookies http-headers

我是AngularJS的新手

我有一个用于用户管理的资源,它是this篇文章后服务的一部分。

将登录请求发送到服务器后,我收到一个带有set-cookie的响应作为标题的一部分。

将此Cookie添加到我发送给服务器的每个请求的最佳做法是什么?

myApp.factory('UserService', ['$resource', function ($resource) {
    var userRes = $resource('http://<MyDomain>/api/v1/user/:param',
        {param: '@param'},
        {
            login: {
                method: 'POST'
            },
            logout: {
                method: 'DELETE'
            }
        });

    var user;
    return {
        signIn: function () {
            user = userRes.login({param: 'login'}, {"email": "SomeName@MyDomain.com", "password": "test1"});
            userRes.get({param: '1'});
        },

userRes.login在响应中有set-cookie标头 userRes.get不发送刚刚收到的cookie。

干杯

1 个答案:

答案 0 :(得分:1)

由于您的API位于不同的域中,因此在这种情况下您无法使用Cookie。我们已经尝试过,但我们没有说明这一点没有办法,不仅它不适用于CORS,而且如果嵌入iframe它也不起作用。 iframe技巧主要在狩猎中失败,但它不可靠。

我们通常做的是从API返回JWT(Json Web Token),然后将标题附加到每个API请求Authorization: Bearer JWT

此JWT可以使用前端的公钥(并且它将包含用户配置文件)进行解码,并使用后端的私钥进行验证。

JWT很简单,每种语言/技术都有很多库。

Auth0是一个身份验证代理,可以使用任何身份提供程序或自定义数据库进行验证,并使用标准返回JWT。它提供了一个clientID,可用于解码前端的配置文件,以及一个秘密,用于验证后端中的令牌以及client side library来执行此操作。

免责声明:我为auth0工作。