【问题标题】:Authenticating using OfficeDev/office-js-helpers rather than adal使用 OfficeDev/office-js-helpers 而不是 adal 进行身份验证
【发布时间】:2017-04-02 03:03:56
【问题描述】:

我正在开发一个当前使用 adal 获取身份验证令牌的 Office 加载项。

因为我想使用 Fabric 前端,所以我将其更改为 React,我注意到officer-js-helpers 已经实现了身份验证器,这些验证器似乎与 adal 库执行相同的工作。 我在这个假设中正确吗?如果是这样,我如何使用 office-js-helpers 身份验证功能复制此 adal 配置:

var adalConfig = {
    instance: 'https://login.microsoftonline.com/',
    tenant: 'myprivatesite.onmicrosoft.com',
    clientId: 'xxx-xxx-xxx-xxx-xxx',
    endpoints: {
      'https://my.private.url.endpoint/path': 'https://myprivatesite.onmicrosoft.com/path.to.something',
    }

还有这个令牌请求:

var authContext = new AuthenticationContext(adalConfig);
 authContext.acquireToken('https://myprivatesite.onmicrosoft.com/path.to.something', function (error, token) {
        console.log(token)
      });

更新: 我的反应应用程序中有 adal.js 库。我使用了adalAuthenticationService 角度提供程序中init 函数中的一些代码来检索身份验证令牌。

所以问题仍然存在。我可以使用office-js-helpers 做同样的事情吗?

【问题讨论】:

    标签: javascript adal office-addins office-js adal.js


    【解决方案1】:

    Adal.js 不能开箱即用地用于 Web 加载项身份验证,因为在 Web 加载项的沙盒 iFrame 上下文中,您不能简单地导航到在您的域之外托管的身份验证登录页面。

    Office-js-helpers 在可用时使用dialogAPI,在不可用时使用弹出窗口作为后备解决方案。

    如果我没记错的话,Office-js-helpers 仅针对 Azure AD v2.0(与 Azure AD 相比,它具有许多不错的新功能)。我想这是一个不错的选择。

    我创建了一个Open source sample 文档,您可能会对它感兴趣。但是,这并不是您想要的,它基于 AuthorizationCode 流,而您正在寻找隐式流。

    【讨论】:

    • 我不关心这方面的问题 - 我有一个当前有效的加载项,并使用现有的 office 身份验证来验证加载项。实际上,如果您已经通过 outlook.office.com(在我的情况下)进行了身份验证,那么加载项将正确启动。我想知道 office-js-helpers 在这种情况下是否合适,是否确实可以按照我的方式使用它们。
    • 我不明白你的评论。您说您已经在 Outlook 中进行了身份验证,但是您从哪里获得请求 AzureAD API 的承载?必须有第二个身份验证流程来检索不记名令牌(由 adal.js 执行)。 Office-js-helpers 将帮助您在插件上下文中实现 OAUTH 流,而不会遇到 iFrame/popup 问题。您将不得不重新实现由 adal.js 处理的东西,例如 refresh_tokens 等。
    • 即使您在实施流程时还没有遇到 iFrame/popup 危机,这是因为您可能在清单中将 login.windows.net 设置为允许在插件中重定向的受信任的应用程序域。但是,在某些情况下,登录页面是company page,您无法提前知道其域并将其设置在清单中。看到这个blog post。现在使用 dialogAPI(由 Office-js-helpers 使用)在大多数情况下可以避免弹出窗口。
    • 我认为你在清单中有一个受信任的域是正确的,但是我没有任何可见性(我只做前端)。现有的插件使用 adal-angular.js,它有一个带有 init 函数的提供程序,该函数检索用户凭据并将其返回给插件,然后可以检索令牌。我正在寻找向我展示如何使用 office-js-helpers 来实现相同目的的文档。这个blog.mastykarz.nl/building-office-365-web-applications-react 展示了如何让 adal.js 工作,但我更喜欢使用 office-js-helpers。
    • 我在使用 adal.js 和 office-js 运行时 github.com/AzureAD/azure-activedirectory-library-for-js/issues/… 时遇到了问题,但 ADAL 人员只是添加了对基于弹出窗口的支持。但您更愿意尽可能依赖 dialogAPI(2016 年年中发布)。这里没有完美的解决方案...
    【解决方案2】:

    OK 看来这非常容易。 adal 配置只需要客户端 ID 和租户。

    if (OfficeHelpers.Authenticator.isAuthDialog()) {
      return;
    }
    
    var authenticator = new OfficeHelpers.Authenticator();
    
    authenticator.endpoints.registerAzureADAuth('xxx-xxx-xxx-xxx-xxx', //clientId
    'myprivatesite.onmicrosoft.com' // tenant
    );
    
    authenticator.authenticate(OfficeHelpers.DefaultEndpoints.AzureAD)
      .then(function (token) {
        console.log(token);
      .catch(function(error) {
        console.log(error);
      });
    

    【讨论】:

    • 这个问题具有误导性,您正在寻找 Office-js-helpers 工作的工作代码。这不是 adal.js 和 office.js 助手的比较。其实这个问题和adal.js无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多