使用MSAL.js进行单点登录?

时间:2017-05-11 08:05:55

标签: javascript azure-active-directory msal

在对AzureAD进行身份验证后,我的应用程序可以进行单点登录吗?

可能的流程:

  1. 以AzureAD用户身份登录
  2. 转到我的应用
  3. 重定向到 https://login.microsoftonline.com/tenantid/oauth2/authorize?client_id=clientid(ish) - >返回一个令牌和 重定向回我的应用程序
  4. 下次我使用我的应用程序如果我有一个有效的cookie我没有被重定向到microsoftonline.com并且可以直接开始使用我的应用程序。

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

    <script class="pre"> 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 }); </script>

2 个答案:

答案 0 :(得分:2)

使用acquireTokenSilent代替loginPopup,并将您的客户端ID作为范围传递。如果承诺被拒绝,那么您需要调用其他一个函数来登录。

答案 1 :(得分:1)

如果指定租户并且之前只有一位用户签署了azure广告,则可以prompt=none(默认情况下)直接登录您的应用。您无法使用MSAL.JS实现,请参阅MSAL.JS的源代码:

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

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

注意:如果用户使用多个帐户登录了azure广告,则无法避免用户选择页面,即按设计,用户应该有机会选择他或她想要用于登录的帐户。申请。