如何使用外部重定向实现Ember Simple Auth



这是我的工作流程。

  1. 用户按下登录按钮
  2. 用户被重定向到API,该API重定向到第三方网站(ADFS SAML(上的登录页面
  3. 用户在那里进行身份验证,返回给API,后者解码响应,创建用户和JWT令牌(均存储在数据存储中(,然后使用?token=查询参数将用户重定向到Ember

我想做的是将其应用于自定义ember-simple-authauthenticator(和authorizer?(,以便从那时起利用会话和授权标头的精确性。

目前,我已经入侵了一个验证器,只重定向到身份提供商。API工作流程的其余部分正在工作。在返回的路上,我在一个路由中捕获令牌,并通过对数据库的调用填充用户资源。但我觉得我走错了(而且很长(路。

有什么想法吗?这是ember-simple-auth-token的设计初衷吗?

我在上个月解决了这个问题。我做的是

  1. 点击登录
  2. 重定向到adfs
  3. adfs登录成功->重定向到我的后端
  4. 后端生成具有访问令牌详细信息的sso-temp令牌已经存在并且仅有效2分钟
  5. 使用带有sso-temp令牌参数的GET进行后端重定向web
  6. 前端获取sso临时令牌的参数并进行另一次发布对后端的ajax请求
  7. Api将验证sso临时令牌并提供详细信息(访问令牌和刷新令牌(发送给用户
  8. 读取6中post请求的响应数据,并在ember上更新使用authenticate接口的简单身份验证服务(您可以使用自定义验证器对此进行自定义(

这里是自定义验证器类

import Base from 'ember-simple-auth/authenticators/base';
import {isEmpty} from '@ember/utils';
export default Base.extend({
authenticate(data) {
return new Promise((resolve, reject) => {
if(data.access_token!=null){
resolve({
scope: data.scope,
access_token: data.access_token,
});
}else{
reject();
}  })
},
restore(data) {
return new Promise((resolve, reject) => {
if (!isEmpty(data.access_token)) {
resolve(data);
} else {
reject();
}
});
},
});

我已经创建了一个在前端处理的路由,以获取后端发送的令牌。所以路由通过get-param获取sso令牌(因为后端无法向emberpapp发布(,所以当路由触发时,我在路由中捕获param,并再次执行post方法来验证令牌。

我们正在使用redis生成的令牌。因此,由于这个问题是关于emberjs的,我展示了在前端支持您的答案。我也说明了这个概念,以展示你需要做什么。所以,这取决于你挖掘并找到更多关于它的信息。比如如何创建临时JWT令牌,如何验证它,如何通过adfs的声明重定向到你的后端等等。我想我提供了你问的最初问题的答案"如何使用外部重定向实现Ember简单身份验证">

最新更新