我正在用angular 6项目使用库adal-angular4@3.0.13。 我尝试执行以下操作:
如果可以使用office365进行静默登录(无需提示用户输入凭据即可登录),请执行静默登录(使用_adalService.login()
如果无法进行静默登录,请在欢迎屏幕中显示一个“登录”按钮。
当我通过azure-ad / o365进行身份验证并且cookie仍然有效时,可以进行silentlogin。
要弄清楚,是否可以进行静默登录,我尝试了以下操作:
try {
let token = await this._adal.acquireToken(this._config.clientId).toPromise();
return true;
} catch (e) {
console.log('acquireToken error', e);
return false;
}
但是它总是返回:
需要用户登录
但是当调用_adalService.login()
时,它会进行静默登录。
我的问题: 我如何确定adaljs是否可以在不提示输入凭据的情况下登录(应该可以,例如从o365-cookie读取)?
答案 0 :(得分:3)
应该尝试将PlatformBehavior.Auto
传递给AcquireToken
的PlatformParameters
参数,而不是尝试确定是否可以使用静默登录。
问题在于adal.js实际上不支持所需的重载,并且您不能将此值指定为extraQueryParameter
。有一会儿,我以为您可以使用prompt
查询参数,但事实并非如此。
乍看之下,看来您做不到。但是您的错误消息提供了线索。
从adal.js源代码中,我可以看到在这种情况下显示的消息:
if (!this._user && !(this.config.extraQueryParameter && this.config.extraQueryParameter.indexOf('login_hint') !== -1)) {
this.warn('User login is required');
callback('User login is required', null, 'login required');
return;
}
在this article中,login_hint
的描述如下:
可用于预填写标牌的用户名/电子邮件地址字段 用户的页面中,如果您提前知道他们的用户名。经常 应用已经在重新身份验证期间使用了此参数 使用来从以前的登录中提取用户名 preferred_username声明。
...当您要进行静默身份验证时,所有这些都非常有意义,但仍然需要说出您要针对谁进行身份验证。
要最终回答这个问题,似乎您应该在'login_hint=myemail@example.com'
上添加config.extraQueryParameter
。