这是我的工作流程。
- 用户按下登录按钮
- 用户被重定向到API,该API重定向到第三方网站(ADFS SAML(上的登录页面
- 用户在那里进行身份验证,返回给API,后者解码响应,创建用户和JWT令牌(均存储在数据存储中(,然后使用
?token=
查询参数将用户重定向到Ember
我想做的是将其应用于自定义ember-simple-auth
authenticator
(和authorizer
?(,以便从那时起利用会话和授权标头的精确性。
目前,我已经入侵了一个验证器,只重定向到身份提供商。API工作流程的其余部分正在工作。在返回的路上,我在一个路由中捕获令牌,并通过对数据库的调用填充用户资源。但我觉得我走错了(而且很长(路。
有什么想法吗?这是ember-simple-auth-token
的设计初衷吗?
我在上个月解决了这个问题。我做的是
- 点击登录
- 重定向到adfs
- adfs登录成功->重定向到我的后端
- 后端生成具有访问令牌详细信息的sso-temp令牌已经存在并且仅有效2分钟
- 使用带有sso-temp令牌参数的GET进行后端重定向web
- 前端获取sso临时令牌的参数并进行另一次发布对后端的ajax请求
- Api将验证sso临时令牌并提供详细信息(访问令牌和刷新令牌(发送给用户
- 读取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简单身份验证">