You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Dynamics 365中使用ADAL.js实现无弹窗获取Token的方案咨询

优化ADAL.js获取CRM认证Token的方案(无弹窗优先)

首先纠正一个关键误区

你提到的microsoftTeams.getContext()是Microsoft Teams专属的客户端API,在Dynamics CRM环境里自然不会有返回值——这个API只能在Teams内嵌的应用中使用,和CRM的认证流程完全不相关,所以用它做静默认证的登录提示是走不通的。

无弹窗静默认证的正确实现(ADAL.js原生支持)

ADAL.js本身就提供了acquireTokenSilent方法,这才是实现无弹窗静默认证的正确方式。它会自动尝试从缓存获取有效token,或者通过隐藏的iframe向AD FS/AAD发起静默请求(不需要用户交互)。

核心逻辑要点:

  • 优先调用acquireTokenSilent,如果成功直接返回token
  • 如果静默请求失败(比如token过期且需要用户重新授权、用户会话失效等),再fallback到弹窗登录(或者根据需求引导用户跳转)

优化你的现有弹窗方案

你当前手动监听popup的location、设置定时器的逻辑其实没必要——ADAL.js已经封装了loginPopup和acquireTokenPopup方法,会自动处理弹窗的打开、回调接收和关闭,代码会简洁很多,也避免了手动操作DOM的潜在问题。

完整优化后的代码示例

var getUser = function () { 
    return new Promise(function (resolve, reject) { 
        // 1. 先尝试从缓存获取用户和token
        var user = authContext.getCachedUser();
        var cachedToken = authContext.getCachedToken(clientId);
        if (user && cachedToken) {
            resolve(cachedToken);
            return;
        }

        // 2. 尝试静默获取token(无弹窗)
        authContext.acquireTokenSilent(clientId, null)
            .then(function (token) {
                resolve(token);
            })
            .catch(function (silentError) {
                // 静默失败,fallback到弹窗登录
                console.log("Silent auth failed, falling back to popup:", silentError);
                // 使用ADAL.js内置的popup方法,自动处理回调和关闭
                authContext.acquireTokenPopup(clientId)
                    .then(function (token) {
                        resolve(token);
                    })
                    .catch(function (popupError) {
                        reject(popupError || "Popup authentication failed");
                    });
            });
    });
};

额外的CRM环境适配建议

在Dynamics CRM中使用ADAL.js时,需要确保:

  • CRM的域名已经添加到AAD应用的重定向URI列表中(包括弹窗回调的URI)
  • 如果是使用CRM Online,确认AAD应用的权限配置正确(需要Dynamics CRM Online的委派权限)
  • 静默认证需要用户已经有有效的AAD会话(比如之前登录过Office 365),否则还是会需要交互

内容的提问来源于stack exchange,提问作者Richa Tibrewal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:22:28