Ember SimpleAuth 和 SimpleSAMLPHP 屏幕闪烁

Ember SimpleAuth & SimpleSAMLPHP Screen Flash

我正在构建一个 Ember 应用程序,我必须与 SimpleSAMLPHP 集成以处理针对多个身份提供商 (IdP) 的身份验证。在高层次上,身份验证流程如下:

问题出在 return 到 Ember 应用程序上。 Ember 将加载视图 A(未经身份验证的视图),因为 Ember SimpleAuth 尚未达到其 sessionAuthenticationSucceeded 回调。此后不久就会到达该回调,我可以将经过身份验证的视图 B 渲染到插座中。问题是用户在看到视图 B 之前先看到了视图 A。

我要么遗漏了一些简单的东西,要么就是没有真正好的方法来做到这一点。我愿意接受任何建议,在此先感谢。

不,您不能通过 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 中有一个会话,并且也重定向到新路由。现在用户没有屏幕闪烁。