ADAL-Angular 离线支持(我错过了什么吗?



我已经看到了处理 adal 离线模式的好方法,但它基于附加到 displayCall 然后访问上下文......不幸的是,上下文没有在 Angular 包装器中公开。在我直接围绕 ADAL 编写一些自定义内容之前,我想我会问其他人如何使用 ADAL 处理基于 AppCache 的离线应用程序?我的用例是农村地区通过移动设备访问互联网参差不齐。在线我希望用户通过 ADAL 流程(效果很好)。离线时,我希望他们验证他们是否可以通过本地散列引脚访问本地数据缓存。

思潮? 谢谢大家。

ADAL.js中没有任何内容旨在支持脱机方案。

ADAL 用于在 Web API 的连接案例中获取访问令牌。 它没有使用令牌保护本地数据存储/缓存的机制。

好的,所以正确的答案是一定要使用config.displayCall。然而,displayCall是在app.config期间使用adal-angular配置的,这几乎使得它不可能真正在angular中使用。因此,这里有一些代码调整,您可以添加到adal-angular中,以便您也可以控制(如果需要)。

1) 在您的提供程序中添加以下 var/函数(我在第 48 行左右完成了)

var internalDisplayCall = function (url) {
if (userDefinedDisplayCall) {
userDefinedDisplayCall(url);
} else {
if (_adal.popUp) {
_adal._loginPopup(url);
}
else {
_adal.promptUser(url);
}
}
}

这与 adal 中关于是否存在 displayCall 方法的逻辑几乎相同。

2) 在同一区域为 userDefinedDisplayCall 添加一个变量

var userDefinedDisplayCall = undefined;

3) 您将需要上下文,因为没有要显示的"跌倒"行为调用以在 adal 中使用默认行为(或在我的 adal 行为副本中),因此将其添加到返回对象中的提供程序中。(我在第 390 行左右这样做)

context: _adal,

4)添加一个方法来设置userDefinedDisplayCall方法,并将THAT添加到你的返回对象中。我在返回对象中内联了这个,所以再次在第 390 行左右

setDisplayCall: function (newDisplayCall) {
if (newDisplayCall && typeof newDisplayCall !== 'function') {
throw new Error('displayCall is not a function');
}
userDefinedDisplayCall = newDisplayCall;
}

现在,您可以使用 azure AD 租户、appId 和所有必需的爵士乐在 app.config 中配置 adalServiceProvider,然后可以在 app.run 中注入 adalService,并配置 displayCall,以便可以注入自己的行为...

相关内容

最新更新