分离的客户端和服务器的身份验
我已经在客户端创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')); });
- SailsJS + PassportJS(sails-generate-auth) – 无法login用户
- nodejs HTTP摘要authentication不起作用
- LocalStrategy和ClientPasswordStrategy之间的护照区别
- NodeJS – 使用Active Directory进行身份validation
- 使用passport-local进行身份validation后,无法使用来自客户端的会话
- 使用express-jwt时,为什么我的授权标题在显式存在的时候丢失了
- 成功login后,Azureauthentication返回到login页面 – node.js
- 如何使用快递基本authentication和护照
- 在处理POST请求时确定谁在Node上使用basicAuth进行了身份validation