Drupal 7 Web サイト用の新しい AngularJS フロントエンドを構築中です。これは、CORS を使用する 2 つのドメイン間で、サービス モジュールをセッション ベースの認証で使用しています。Drupal で認証し、ユーザー オブジェクトとセッション データを取得してから、サービス モジュールから CSRF トークンを取得できます。私が問題を抱えているのは、ヘッダーにこれらすべてを設定して、後続のリクエストが認証されるようにすることです。全体的な概念は理解していますが、AngularJS と CSRF 攻撃の防止の両方については初めてです。
AngularJS と RubyOnRails を使用したこのセットアップについて読んで集めたものから、トークンの名前と処理方法に関して、プラットフォーム間で矛盾が生じる可能性があります。このトークンをヘッダーに設定する方法についても、いくつかの提案があるようです。しかし、これらのプラットフォームが同じ言語を話すようにする方法の確かな例を見つけるのに苦労しています.
app.js で $httpProvider を使用して行っている唯一のことは次のとおりです。
delete $httpProvider.defaults.headers.common['X-Requested-With'];
controller.js 内のログイン コントローラー:
.controller('LoginCtrl', ['$scope', '$http', '$cookies', 'SessionService', function($scope, $http, $cookies, SessionService) {
$scope.login = function(user) {
//set login url and variables
var url = 'http://mywebsite.com/service/default/user/login.json';
var postDataString = 'name=' + encodeURIComponent(user.username) + '&pass=' + encodeURIComponent(user.password);
$http({
method: 'POST',
url: url,
data : postDataString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (data, status, headers, config) {
var sessId = data.sessid;
var sessName = data.session_name;
$cookies[sessName] = sessId;
var xsrfUrl = 'http://mywebsite.com/services/session/token';
$http({
method: 'GET',
url: xsrfUrl
}).success(function (data, status, headers, config) {
$cookies["XSRF-TOKEN"] = data;
SessionService.setUserAuthenticated(true);
}).error(function (data, status, headers, config) {
console.log('error loading xsrf/csrf');
});
}).error(function (data, status, headers, config) {
if(data) {
console.log(data);
var msgText = data.join("\n");
alert(msgText);
} else {
alert('Unable to login');
}
});
};