【问题标题】:How to use azure AD authentication from node.js server side non interactively如何以非交互方式从 node.js 服务器端使用 azure AD 身份验证
【发布时间】:2019-09-05 06:02:40
【问题描述】:

我已经在其中配置了 azure AD 服务和一个用户,并使用 react-adal 来获取令牌,效果很好。但是现在我需要更改此流程,而是拥有自己的登录表单并将凭据发送到节点。 Node.js 表达服务器并从 azure ad 验证这些,而无需从 azure 弹出登录弹出窗口,并将返回的令牌存储在护照会话中。我尝试使用 node-adal,但不确定如何实现,可以做到吗?有没有这方面的例子。谢谢

【问题讨论】:

  • 请在对您有帮助的帖子上点击“标记为答案”并将其投票为有帮助,这可能对其他社区成员有益。

标签: node.js azure azure-active-directory adal


【解决方案1】:

有一种方法,但你不应该使用它。 使用联合身份验证时,您不应处理密码。

一种可行的方法是传统的迁移路径,称为 ROPC 流。 但是,这些都不起作用:

  • MFA 用户
  • 用户从本地 AD 同步
  • 密码过期的用户

如果您想以用户身份在后台执行某些操作,请让他们登录并安全地存储他们的刷新令牌。 您需要将前端访问令牌交换为后端访问令牌 + 刷新令牌。 然后,您可以随时使用刷新令牌为用户获取新令牌。

或者,您可以要求对 API 的应用程序权限,并使用 API 中的客户端凭据(客户端 ID + 密码/证书)访问它们。

【讨论】:

    【解决方案2】:

    同意@juunas,这里是非交互方式(login with username and password)供大家参考。此示例用于管理 MicrosoftGraph 资源。

    var msRestAzure = require('ms-rest-azure');
     var graphRbacManagementClient = require('azure-graph');
     var tenantId='abcd-efgh-ijk-lmno-12345';
     // Enter your tenant ID here which can be found from your Azure AD URL
     // Eg. https://manage.windowsazure.com/example.com#Workspaces/ActiveDirectoryExtension/Directory/<TenantId>/users
    
     msRestAzure.loginWithUsernamePassword('username@contosocorp.onmicrosoft.com', 'your-password', { tokenAudience: 'graph', domain: tenantId }, function (err, credentials, subscriptions) {
      if (err) console.log(err);
      var client = new graphRbacManagementClient(credentials, tenantId);
      var userParams = {
        accountEnabled: true,
        userPrincipalName: 'OfficialStark@<yourdomain.com>', //please add your domain over here
        displayName: 'Jon Snow',
        mailNickname: 'OfficialStark',
        passwordProfile: {
          password: 'WinterisComing!',
          forceChangePasswordNextLogin: false
        }
      };
      client.users.create(userParams, function (err, user, request, response) {
        if (err) return console.log(err);
        console.log(user);
        var userObjectId = user.objectId;
        client.users.list(function (err, result, request, response) {
          if (err) return console.log(err);
          console.log(result);
          client.users.deleteMethod(userObjectId, function (err, result, request, response) {
            if (err) return console.log(err);
            console.log(result);
          });
        });
      });
     });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多