分离的客户端和服务器的身份验

我已经在客户端创build了angular色2的Web应用程序,并为服务器端创build了具有express框架的NodeJS

对于客户端来说,我使用angular-cli生成了在lite-server上运行的项目,所以我的客户端和服务器在两个不同的服务上运行。

我想集成ADFS身份validation。 为了实现身份validation,我使用passport-saml包。 我的服务器端API有一个中间件,需要用户进行身份validation。

当直接到达服务器(没有客户端)时,身份validation过程正常工作。

但是,我无法通过@angular/http访问API 。 我尝试了一个简单的GET请求从服务器(与中间件在终点),结果我得到的身份validation页面没有redirect(我不认为这是核心问题,但实际的实施)。

在服务器和客户端使用单独的服务时,我应该如何正确地实现身份validation?

嗨,我也面临同样的问题,我的angular度项目是在4200端口上托pipe。 和我的节点在3000端口。 我们有两个端口运行时很难实现护照。

步骤1通过对公用文件夹执行ng build来使angular度项目为静态。 确保angular-cli.json具有*"outDir": "../public",*

步骤2现在我们可以使用相同的节点端口来访问angular根,请在您的节点app.js中添加以下代码

 var path = require('path'); // Set Static Folder app.use(express.static(path.join(__dirname, 'public'))); app.get('*', function(req, res) { res.sendFile(path.join(__dirname, 'public/index.html')); }); 

这将使您的angular度项目可以通过节点端口访问。

第3步:现在我们可以在用户界面中添加护照loginbutton,并提供URL <a href="/passport/auth/twitter">twitter</a>

这不是解释性的手段感觉问我的疑惑。

当客户端执行GET到服务器时,您没有详细说明失败的响应。 是400吗? 401? 404? 500? 你有没有收到CORS错误?

你为什么使用GET作为login端点? 您应该在POST有效负载中正确发送凭证?

无论如何,在您的angular2代码中,您应该使用login方法进行身份validation服务。 login方法应该做一些事情..

 login(credentials) { return http.post(your_server_url, payload); } 

然后你可以订阅由login方法返回的Observable,如果一切正常,则router.navigate主页面,或者如果显示不好,则显示login错误消息。

在..src / environments / environment.ts中为UI和服务器设置单独的URL

  export const environment = { production: false, BASE_URL: 'http://localhost:4200', API_BASE_URL: 'http://localhost:5000', }; 

在节点app.js中

  app.use('/', express.static('public')); app.get('*', function (req, res) { res.sendFile(path.join(process.cwd(), 'public', 'index.html')); });