Angular 2 ADAL令牌刷新,用于隐式流程(使用“adal-angular4”)

时间:2017-08-05 02:24:52

标签: angular jwt adal

在隐式流程中似乎没有实用的方法来刷新令牌。 有没有人能够做到这一点? MS文档建议在iframe中进行刷新,寻找在adal ng2或adal js中调用哪些方法的建议!!!

编辑: 我正在使用这个库 https://github.com/benbaran/adal-angular4

编辑:不要使用上述库,这是一个真正的POS

3 个答案:

答案 0 :(得分:1)

使用implicit flow您没有刷新当前令牌,您需要获得一个新令牌。

以下是我在我的应用中处理的方法:

我正在使用与oidc-client-js对话的IdentityServer(不是adal js)。我有20分钟的令牌寿命。因此,为了使客户端认证超过20分钟,必须在某个时刻请求新令牌。为了做到这一点,我正在检查用户是否为idle,何时不是,等等,根据逻辑,可以使用IdentityServer和{{signinSilentautomaticSilentRenew获取新令牌。 3}}事件。正如oidc-client-js中实现的那样,使用iframe进行刷新。

更新

通过查看adal-angular4 source,您需要致电acquireToken才能续订令牌。根据文档:

/**
* Acquire token from cache if not expired and available. Acquires token from iframe if expired.
* @param {string}   resource  ResourceUri identifying the target resource
* @param {requestCallback} callback
*/
acquireToken(resource: string, callback: (message: string, token: string) => any): void;

您可以使用acquireToken this.service.acquireToken(...)home.component.ts

中将setTimeout(function() { window.location.replace("https://google.com"); }, 3000); 用作wget -E -H -k -K -p http://www.website.com

答案 1 :(得分:1)

您不需要明确地做任何事情来更新ADAL js和angular上的令牌。 ADAL js会自动拦截REST调用,如果必要的令牌没有到期或接近到期,它将主动在后台续订令牌。它对您来说都是透明的,但不需要在单页应用中使用刷新令牌;表示Azure AD会话的工件是在身份验证时发出的cookie。 ADAL JS使用隐藏的iframe来驱动无需UX的身份验证,该身份验证利用该cookie的存在来通过隐式流从Azure AD获取新令牌。

答案 2 :(得分:1)

我还在Angular 5应用程序中实现了ADAL js,并通过以下方式实现:

用户使用AD进行身份验证并获取具有生命周期的访问令牌(在我的情况下为60分钟)。该令牌缓存在浏览器中。每次向后端发出请求时,令牌都会从Cache中获取并发送到后端。

然后,还有另一个名为expireOffsetSeconds的参数(在Adal配置的前端定义)。它对我来说设定为600(= 10分钟)。 这意味着,从第1分钟到第49分钟,它从缓存中获取令牌。在最后10分钟,它会向AD发出新请求以续订令牌。

因此,确保用户不必每小时重新登录。但是在用户不活动的情况下'会话自动被ADAL无效。

欢迎任何反馈/改进:)