Ember SimpleAuth 和 SimpleSAMLPHP 屏幕闪烁
Ember SimpleAuth & SimpleSAMLPHP Screen Flash
我正在构建一个 Ember 应用程序,我必须与 SimpleSAMLPHP 集成以处理针对多个身份提供商 (IdP) 的身份验证。在高层次上,身份验证流程如下:
- 用户导航到 Ember 应用程序
- 用户未通过身份验证(通过 SimpleAuth)并且看到视图 A。
- 用户单击 "log in" 并被定向到 SimpleSAMLPHP,它在 Ember 应用程序之外。
- 用户输入凭据并根据任何 IdP 进行身份验证并returned 到 Ember 应用程序。
问题出在 return 到 Ember 应用程序上。 Ember 将加载视图 A(未经身份验证的视图),因为 Ember SimpleAuth 尚未达到其 sessionAuthenticationSucceeded 回调。此后不久就会到达该回调,我可以将经过身份验证的视图 B 渲染到插座中。问题是用户在看到视图 B 之前先看到了视图 A。
- 我可以通过 AJAX POST 到 SimpleSAMLPHP 而不必离开 Ember 应用程序吗?我假设这会破坏重点,造成安全问题等。
- 或者在到达 sessionAuthenticationSucceeded 回调之前,有没有办法让 Ember 呈现不同?
- 我想我也可以使用一些技巧,让视图 A 始终是微调器或其他东西,然后在准备好时呈现一个新视图。我认为这可能会导致其他问题,因为 sessionAuthenticationSucceeded 仅在身份验证后立即执行。
我要么遗漏了一些简单的东西,要么就是没有真正好的方法来做到这一点。我愿意接受任何建议,在此先感谢。
不,您不能通过 AJAX POST 到 simpleSAMLPHP。 SAML / SSO 的工作方式是将用户定向到 ADFS 门户,然后用户登录,生成并验证令牌,然后将用户发送回端点 URL。 SSO 和 SAML 的价值在于它让开发人员承担零责任。我已经并且确实将 SIMPLESAML / SSO 合并到应用程序中,并且用户针对 Active Directory 服务器进行身份验证,然后被定向回 SSO 应用程序以及 SSO 属性。通常可以传递的唯一属性是,USERNAME、FIRST NAME、LAST NAME、PHONE、EMAIL 等... SSO 的目的是您在一个地方登录,然后被传递到您所在的任何站点试图访问。我们为学术界的所有 PHP 企业级应用程序执行此操作。
我最终做的基本上是在我的 Ember 应用程序的 "index" 路由中没有任何视图逻辑,而是创建一个新路由,我在登录后将用户重定向到该路由. 我还添加了 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 中有一个会话,并且也重定向到新路由。现在用户没有屏幕闪烁。
我正在构建一个 Ember 应用程序,我必须与 SimpleSAMLPHP 集成以处理针对多个身份提供商 (IdP) 的身份验证。在高层次上,身份验证流程如下:
- 用户导航到 Ember 应用程序
- 用户未通过身份验证(通过 SimpleAuth)并且看到视图 A。
- 用户单击 "log in" 并被定向到 SimpleSAMLPHP,它在 Ember 应用程序之外。
- 用户输入凭据并根据任何 IdP 进行身份验证并returned 到 Ember 应用程序。
问题出在 return 到 Ember 应用程序上。 Ember 将加载视图 A(未经身份验证的视图),因为 Ember SimpleAuth 尚未达到其 sessionAuthenticationSucceeded 回调。此后不久就会到达该回调,我可以将经过身份验证的视图 B 渲染到插座中。问题是用户在看到视图 B 之前先看到了视图 A。
- 我可以通过 AJAX POST 到 SimpleSAMLPHP 而不必离开 Ember 应用程序吗?我假设这会破坏重点,造成安全问题等。
- 或者在到达 sessionAuthenticationSucceeded 回调之前,有没有办法让 Ember 呈现不同?
- 我想我也可以使用一些技巧,让视图 A 始终是微调器或其他东西,然后在准备好时呈现一个新视图。我认为这可能会导致其他问题,因为 sessionAuthenticationSucceeded 仅在身份验证后立即执行。
我要么遗漏了一些简单的东西,要么就是没有真正好的方法来做到这一点。我愿意接受任何建议,在此先感谢。
不,您不能通过 AJAX POST 到 simpleSAMLPHP。 SAML / SSO 的工作方式是将用户定向到 ADFS 门户,然后用户登录,生成并验证令牌,然后将用户发送回端点 URL。 SSO 和 SAML 的价值在于它让开发人员承担零责任。我已经并且确实将 SIMPLESAML / SSO 合并到应用程序中,并且用户针对 Active Directory 服务器进行身份验证,然后被定向回 SSO 应用程序以及 SSO 属性。通常可以传递的唯一属性是,USERNAME、FIRST NAME、LAST NAME、PHONE、EMAIL 等... SSO 的目的是您在一个地方登录,然后被传递到您所在的任何站点试图访问。我们为学术界的所有 PHP 企业级应用程序执行此操作。
我最终做的基本上是在我的 Ember 应用程序的 "index" 路由中没有任何视图逻辑,而是创建一个新路由,我在登录后将用户重定向到该路由. 我还添加了 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 中有一个会话,并且也重定向到新路由。现在用户没有屏幕闪烁。