1

已通过 AzureAD 身份验证后,是否可以为我的应用程序获得单点登录?

可能的流量:

  1. 以 AzureAD 用户身份登录
  2. 转到我的应用
  3. 重定向到 https://login.microsoftonline.com/tenantid/oauth2/authorize?client_id=clientid (ish) -> 它返回一个令牌并重定向回我的应用程序

下次我使用我的应用程序时,如果我有一个有效的 cookie,我不会重定向到 microsoftonline.com,并且可以直接开始使用我的应用程序。

简而言之,我想在不为最终用户显示弹出窗口的情况下进行回调:

var userAgentApplication = new Msal.UserAgentApplication("your_client_id", null, function (errorDes, token, error, tokenType) {
      // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup)
})
userAgentApplication.loginPopup(["user.read"]).then( function(token) {
    var user = userAgentApplication.getUser();
    if (user) {
       // signin successful
    } else {
       // signin failure
    }
}, function (error) {
    // handle error
});
4

2 回答 2

2

使用acquireTokenSilent而不是 loginPopup,并将您的客户端 ID 作为范围传递。如果 promise 被拒绝,那么您需要调用其他函数之一来登录。

于 2017-07-16T23:10:08.317 回答
1

如果指定租户并且之前只有一个用户登录过 azure ad,您可以直接登录您的应用 if prompt=none(默认情况下)。用 MSAL.JS 是做不到的,参考 MSAL.JS 的源码:</p>

 var urlNavigate = authenticationRequest.createNavigateUrl(scopes) + "&prompt=select_account" + "&response_mode=fragment";

它将设置prompt=select_account将用户重定向到选择帐户页面。如果您使用 Azure AD 帐户并且只想登录特定的租户,您可以尝试 ADAL.JS(不会强制 prompt=select_account)。如果那是一个多租户应用程序(使用common而不是租户 id ),您无法避免用户选择带有 azure ad v2.0 端点的页面。

注意:如果用户使用多个帐户登录azure ad,您无法避免用户选择页面,即设计上,用户应该有机会选择他或她想使用哪个帐户登录应用程序。

于 2017-05-15T06:59:32.457 回答