Nano Hash - криптовалюты, майнинг, программирование

Управление доступом к потоку учетных данных клиента OAuth Azure AD

Я использую авторизацию Azure AD OAuth2 для защиты своего веб-API. Теперь мне нужно поддерживать два сценария (потока) OAuth2 -

  1. Веб-приложение, обращающееся к веб-API, и API на основе роли пользователя будут обслуживать ресурс. Это достигается с помощью потока авторизации oauth, а управление доступом осуществляется с помощью атрибутов Authorize [Role = "Read"].

  2. Приложение-демон (консоль), обращающееся к тому же веб-API. Хотя я могу получить токен, используя поток учетных данных клиента oauth, но я не могу понять, как управлять доступом к процессу демона

Как только токен выдает ошибку, консоль может получить доступ буквально к любому из методов API.

Область действия - когда grant_type равен "client_credentials", область не является параметром для роли конечной точки / token - ее нельзя использовать, поскольку она связана с пользователем.

Может кто-нибудь предложить, как мы можем управлять доступом в потоке учетных данных клиента? И как я могу удовлетворить требования 1 и 2 одновременно


Ответы:


1

Вы можете определить «роли» как для пользователей, так и для приложений в манифесте вашего API в Azure AD.

Роли приложений на самом деле являются разрешениями приложений, если вам интересно.

Таким образом, у вас может быть что-то вроде этого в вашем манифесте API (другие свойства удалены для ясности):

{
  "appRoles": [
    {
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "Read all things",
      "id": "32028ccd-3212-4f39-3212-beabd6787d81",
      "isEnabled": true,
      "description": "Allow the application to read all things as itself.",
      "value": "Things.Read.All"
    },
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Read things",
      "id": "ef8d02ff-eee1-6745-9387-96587c358783",
      "isEnabled": true,
      "description": "Allow the user to read things.",
      "value": "Things.Read"
    }
  ]
}

Итак, мы определяем роль, в которой в качестве членов допускаются только приложения. Это разрешение приложения. Другой - роль, которую можно дать пользователям и группам.

Затем вы можете предоставить пользователям роль «Читать все», а консольному приложению демона - разрешение «Читать все». И вы реализуете оба сценария :)

Вы добавляете роль пользователям / группам, перейдя в Корпоративные приложения-> Ваш API-> Пользователи и группы-> Добавить пользователя. Выберите нужных пользователей / группы, а затем выберите для них роль (если у вас только одна, она будет выбрана заранее).

«После

Вы добавляете разрешение приложения, находя другое приложение Регистрация приложения-> Требуемые разрешения-> Добавить-> Найдите свой API-> Выбрать-> Проверить разрешение приложения, которое вы определили ранее, из списка. Затем вы можете нажать кнопку «Предоставить разрешения», чтобы назначить роль приложения.

«Разрешения,

Затем вы получите значение в заявке на роли для любого сценария.

Таким образом, в первом сценарии утверждение роли будет выглядеть следующим образом:

"roles": [
    "Things.Read"
  ],

и так во втором сценарии:

"roles": [
    "Things.Read.All"
  ],
30.08.2017
  • Это будет работать в сценарии 1, но как проходят учетные данные этого рабочего клиента? Предполагая, что у меня есть одно клиентское приложение, которое должно иметь доступ для чтения, а другое - для записи, где мне указать сопоставление? Есть ли способ определить этот доступ на лазурном портале? или может ли клиент запросить это разрешение на чтение / запись в запросе токена? 30.08.2017
  • Токен, который вы получите с учетными данными клиента, должен включать роль после того, как вы добавите разрешение приложения в консольное приложение в Azure AD и предоставите его. 30.08.2017
  • Просто чтобы убедиться, что это работает, как я помню, я тестировал это. В обоих токенах вы получаете массив ролей, который содержит значение, определенное в роли. Так что в данном случае либо Things.Read, либо Things.Read.All. :) 30.08.2017
  • после добавления разрешения приложения в консольное приложение в Azure AD и предоставления его. Не могли бы вы немного объяснить это. Это где я борюсь. Кажется, у меня нет возможности назначить роль консольному приложению на лазурном портале. Я что-то упускаю ? В нем перечислены только разрешения, перечисленные в oauth2permissions, но не те, которые указаны в разрешении. 30.08.2017
  • Хм, если вы определяете его как роль приложения в манифесте (с разрешенным типом члена Application), он должен отображаться в разрешениях приложения, когда вы переходите к Требуемым разрешениям в своем проекте веб-приложения. 30.08.2017
  • Список разрешений с необходимыми разрешениями не отображается. Он показывает только список разрешений oauth2 30.08.2017
  • Так это не похоже на мой пост? Проверьте фото, которое я добавил. Azure AD может быть в медленном настроении. Иногда что-то застревает, и вам просто нужно немного подождать. Дважды проверьте манифест вашего API, а затем проверьте еще раз. Вы также можете попробовать другой браузер, чтобы обойти некоторые кеши. 30.08.2017
  • Позвольте нам продолжить это обсуждение в чате. 30.08.2017
  • Хотя я определил appRoles, я не вижу раздел разрешений приложений, я мог видеть только раздел делегированных разрешений. Он доступен только администратору? 30.08.2017
  • Ах ... Ваше приложение может быть родным! У них нет разрешений для приложений, поскольку они не могут хранить секреты. 30.08.2017
  • Вам нужно будет сделать его веб-приложением / api, чтобы по существу использовать поток учетных данных клиента. 30.08.2017
  • Вторым параметром учетных данных клиента должен быть секрет / ключ клиента, а не GUID. 30.08.2017
  • @junnas да, это была опечатка. я просто хочу показать структуру jwt. Есть мысли о том, почему роли не проходят в jwt? 31.08.2017
  • Если вы дали приложению разрешение в консольном приложении и предоставили его, оно должно появиться. Нет причин не делать этого. 31.08.2017
  • Я дал приложению разрешение в консольном приложении. Но что вы подразумеваете под этим? Нужно ли мне выбирать параметр «Предоставить разрешения» на портале Azure? 31.08.2017
  • да. Добавление разрешения приложения только говорит о том, что это приложение хочет это сделать. Он по-прежнему требует одобрения администратора, чтобы фактически получить назначенную ему роль. 31.08.2017

  • 2

    Вы можете получить роль приложения, как вы упомянули, с токеном, который вы получаете на стороне клиента. Но на стороне сервера (защищенная сторона API) нет возможности увидеть утверждения ролей для авторизации.

    С помощью User / Roles вы можете создать сопоставление между пользователями и ролями, определенными в файле манифеста. Таким образом, UI и API будут знать роли пользователей для авторизации.

    С помощью приложения / ролей на портале Azure невозможно создать сопоставление clientId / clientSecret с AppRole, определенным в Manifest.

    10.04.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..