5

我在 angular 6 项目中使用库 adal-angular4@3.0.13。我尝试执行以下操作:

  1. 如果可以使用 office365 进行静默登录(无需提示用户输入凭据即可登录),则执行静默登录(使用_adalService.login()

  2. 如果无法进行静默登录,则在欢迎屏幕中显示“登录”按钮。

当我通过 azure-ad / o365 身份验证并且 cookie 仍然有效时,可以进行静默登录。

为了找出是否可以进行静默登录,我尝试了以下操作:

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 中读取),我怎么知道?

4

1 回答 1

3

与其尝试确定静默登录是否可用,不如将参数传递PlatformBehavior.Auto给.PlatformParametersAcquireToken

问题是 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;
}

这篇文章中,login_hint是这样描述的:

如果您提前知道他们的用户名,可用于为用户预先填写登录页面的用户名/电子邮件地址字段。应用程序通常会在重新身份验证期间使用此参数,因为已经使用 preferred_username 声明从先前的登录中提取了用户名。

...当您希望进行静默身份验证时,所有这些都很有意义,但仍然需要说明您正在为谁进行身份验证。

要最终回答这个问题,您似乎应该添加'login_hint=myemail@example.com'到您的config.extraQueryParameter.

于 2018-10-17T20:33:09.593 回答