分离的客户端和服务器的身份验
我已经在客户端创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')); });
- 本地testingAzure Mobile Auth – 无效的jwt签名
- 使用Passport在Socket.io上进行令牌validation
- Firebase createUserWithEmailAndPassword方法在node.js中未定义
- 通过Node.js项目存储通用authentication详细信息的强大方法是什么?
- 使用react-dev-tools黑客authentication
- 使用MEAN +护照更改基于用户angular色的视图
- 如何使用htaccess的替代密码保护nodejs应用程序
- 客户端的JavaScript代码replace
- 如何在Node.js中重新使用由Play Framework 2.2设置的签名cookie?