Как использовать Azure AD аутентификацию со стороны узла node.js не в интерактивном режиме - PullRequest
2 голосов
/ 15 апреля 2019

Я настроил службу Azure AD и пользователя в ней и использовал реактив-адал для получения токена, который работал нормально. Но теперь мне нужно изменить этот поток и вместо этого иметь свою собственную форму входа в систему и отправлять учетные данные на узел.js express server и проверьте их из Azure Ad без всплывающего имени входа из Azure и сохраните возвращенный токен в сеансе паспорта. Я пытался использовать node-adal, но не уверен, как этого можно достичь. Можно ли это сделать?Есть ли примеры для этого. Спасибо

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Согласитесь с @juunas, вот неинтерактивный метод ( логин с именем пользователя и паролем ) для вашей справки. Этот образец используется для управления ресурсами 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);
      });
    });
  });
 });
1 голос
/ 15 апреля 2019

Есть способ, но вы не должны его использовать. При использовании федеративной аутентификации вы не должны обрабатывать пароли.

Единственный способ, который работает, - это устаревший путь миграции, называемый потоком ROPC. Однако ни один из них не будет работать:

  • Пользователь с MFA
  • Пользователь синхронизирован с локальной рекламы AD
  • Пользователь с просроченным паролем

Если вы хотите сделать что-то в качестве пользователя в фоновом режиме, попросите его войти в систему и надежно сохранить свой токен обновления. Вам нужно будет обменять токен внешнего доступа на внутренний токен доступа + токен обновления. Затем вы можете использовать токен обновления, чтобы получать новые токены для пользователя в любое время.

В качестве альтернативы вы можете запросить разрешения приложений для API и получить к ним доступ, используя учетные данные клиента из вашего API (идентификатор клиента + секрет / сертификат).

...