我正在构建一个Ember应用程序,我必须与SimpleSAMLPHP集成以处理针对多个身份提供程序(IdP)的身份验证。在较高级别,身份验证流程如下:
这是回归Ember应用程序的问题。 Ember将加载视图A(未经过身份验证的视图),因为Ember SimpleAuth尚未到达其sessionAuthenticationSucceeded回调。之后不久就达到了回调,我可以将经过身份验证的视图B渲染到插座中。问题是用户在看到视图B之前会看到闪视视图A.
我要么缺少一些简单的东西,要么就是没有一个好的方法来做到这一点。我愿意接受任何建议,谢谢。
答案 0 :(得分:0)
不,你不能通过AJAX POST到simpleSAMLPHP。 SAML / SSO的工作方式是用户指向ADFS门户,用户然后生成并验证SIGNS IN,TOKENS,然后用户返回到ENDPOINT URL。 SSO和SAML的价值在于它为开发人员带来ZERO责任。我已经并且确实将SIMPLESAML / SSO合并到应用程序和用户对Active Directory服务器进行身份验证,然后将其与SSO ATTRIBUTES一起定向回SSO应用程序。通常可以传递的唯一属性是USERNAME,FIRST NAME,LAST NAME,PHONE,EMAIL等...... SSO的目的是您在ONE PLACE登录,然后传递给您尝试访问的任何站点。我们为学术界的所有PHP企业级应用程序执行此操作。
答案 1 :(得分:0)
我最终做的是基本上没有在我的Ember应用程序的“索引”路径上有任何视图逻辑,而是创建一个新的路由,我在登录后将用户重定向到。我还添加了AuthenticatedRouteMixin所以我可以使用beforeModel钩子转换。它的要点是:
App.ApplicationRoute = Ember.Route.extend(
SimpleAuth.AuthenticatedRouteMixin,
SimpleAuth.ApplicationRouteMixin,
{
beforeModel: function (transition) {
var session = this.get('session');
if (!Ember.isEmpty(session)) {
this.transitionTo('new route');
} else {
this._super(transition);
}
},
model: function (params) {
// ...
},
renderTemplate: function () {
// ...
},
actions: {
sessionAuthenticationSucceeded: function () {
this.renderTemplate();
this.transitionTo('new route');
},
authenticateSession: function () {
// ...
},
invalidateSession: function () {
// ...
}
}
});
有效地,用户被重定向到SimpleSAMLPHP,登录和重定向,Ember重定向到新路由。如果他们刷新页面,我们会看到他们在beforeModel中有一个会话,并且也会重定向到新路由。现在用户没有屏幕闪烁。