2016-05-06 4 views
1

私はすべて同じ会社の下にある一連のプログラムを持っています。プログラムのアイデアは非常にマイクロサービス指向であり、認証を処理し、誰かがプログラムの1つにいる限り、認証を処理する1つのサービスがあります。問題は、すべてのドメインで同じCookieにアクセスして、セッション認証のためにこれらのCookieを認証サービスに送信できるようにするために、他のサービスが必要なことです。ログイン/認証サービスでマイクロサービスを設定する適切な方法でない場合は、修正してください。私のサーバー(ノード、エクスプレス、モンゴ)についてはAngularjs、Nodejs、Expressjs、express-sessoion、Mongo Storeを使用したクロスドメインCookie

service.login = function (obj, callback) { 
     $http.post(loginService + "login", obj, { 
      withCredentials: true 
     }).success(function (data) { 
      callback(data); 
     }) 
     .error(function (data, status, headers) { 
      console.log(status); 
     }); 
    }; 

要求
var options = { 
    pfx: fs.readFileSync('company.pfx'), 
    passphrase: 'pass', 
    ca: [fs.readFileSync('gd1.crt'), fs.readFileSync('gd2.crt'), fs.readFileSync('gd3.crt')], 
    spdy: { 
     protocols: ['h2', 'spdy/3.1', 'http/1.1'], 
     plain: false, 
     'x-forwarded-for': true, 
     connection: { 
      windowSize: 1024 * 1024, // Server's window size 

      // **optional** if true - server will send 3.1 frames on 3.0 *plain* spdy 
      autoSpdy31: false 
     } 
    } 
}; 

var server = spdy.createServer(options, app); 

app.use(helmet()); 
app.use(cookieParser()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use("/static", express.static('static')); 
app.use("/logins", express.static('logins')); 
app.set('trust proxy', 1) // trust first proxy for production with a proxy server 
app.use(session({ 
    resave: false, 
    saveUninitialized: true, 
    genid: function (req) { 
     return uuid.v4() // use UUIDs for session IDs 
    }, 
    name: "myToken", 
    secret: 'mysecret', 
    cookie: { secure: false, maxAge: (45 * 60000) }, // set secure to true when in production 
    store: new mongoStore({ url: 'mongodb://' + base + 'sessions' }) 
})); 
app.use(function (req, res, next) { 
    res.header('Access-Control-Allow-Credentials', true); 
    res.header('Access-Control-Allow-Origin', req.headers.origin);//req.headers.origin); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH'); 
    res.header('Access-Control-Allow-Headers', 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'); 
    next(); 
}); 

app.get('/', function (req, res) { 
    var sess = req.session, token = req.cookies.myToken; 
    res.send('Hello World!'); 
}); 

をこのIをテストするには、私のフロントエンド(Angularjs)については

アプリケーションがデプロイされた状態で私のシステム上で仮想マシンを実行させてから、自分のlocalhost:/アプリケーションも実行しています。 CORSが正しく設定されていれば、私の理解から、同じセッションで2回の通話の間にクッキーが同じになるはずです。助けや提案はありますか?

答えて

0

あなたは

res.header( 'アクセス制御 - 許可 - 起源'、 '* .domainを')を試したことがありますか?

基本的に、メインドメインのサブドメインに一致するワイルドカードです。

+1

はい、これはサブドメインでは機能しますが、プログラムは別のドメインで動作します。 – Ohjay44

関連する問題