Ember SimpleAuth& SimpleSAMLPHP屏幕闪光灯

时间:2015-02-05 19:28:22

标签: ember.js ember-simple-auth simplesamlphp

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

  • 用户导航到Ember应用程序
  • 未对用户进行身份验证(通过SimpleAuth)并查看视图A.
  • 用户点击“登录”并转到SimpleSAMLPHP,它位于Ember应用程序之外。
  • 用户输入凭据并根据任何IdP进行身份验证并返回到Ember应用程序。

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

  • 我可以通过AJAX发布到SimpleSAMLPHP而无需离开Ember应用程序吗?我认为这会破坏这一点,产生安全问题等等。
  • 或者有没有办法在达到sessionAuthenticationSucceeded回调之前让Ember有不同的渲染?
  • 我想我也可以使用一些技巧并让视图A总是一个微调器或者什么东西然后在准备好时渲染一个新的视图。我认为这可能只会导致其他问题,因为sessionAuthenticationSucceeded仅在身份验证后立即执行。

我要么缺少一些简单的东西,要么就是没有一个好的方法来做到这一点。我愿意接受任何建议,谢谢。

2 个答案:

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