2016-11-11 3 views
0

То, что мы планируем достичь, - это защита на основе ролей для Front Front-2 и внешнего API-интерфейса ASP.NET. Мы выполняем процесс аутентификации с помощью ADAL.js и сохраняем токен в локальном хранилище. Мы также реализовали предложенный подход here, т. Е. Вызвать API-интерфейс Graphi и получить группы пользователей, чтобы заполнить их в Claims.Ролевая/групповая авторизация с использованием ADAL.js и веб-API ASP.NET

Мой вопрос: есть ли в любом случае, мы можем добавлять заявки на роль с сервера на носитель Token, который находится в локальном хранилище. Или есть лучший способ подойти к этой проблеме.

ответ

0

В приведенном примере кода назначается роль, основанная на группе. Если у вас есть базовая версия Azure AD, она поддерживает назначение роли пользователям/группам напрямую.

Мой вопрос: есть ли в любом случае, мы можем добавлять заявки на роль с сервера на носитель Token, который находится в локальном хранилище. Или есть лучший способ подойти к этой проблеме.

Да, это возможно. Чтобы выдать претензии о роли, нам нужно назначить пользователям сначала назначать роли пользователям или группе. Затем, когда пользователь получает токен, Azure AD выдаст относительные требования к роли в токене.

Вы можете ссылаться на образец кода для использования заявки на роль от here.

А вы также можете быть заинтересованы в groups claim developing.

+0

То, что мы в основном хотят достигнуть, карты наших групп ролей и сделать авторизацию на основе ролей, не выходя за Azure Active Directory премии. В любом случае, мы можем получить токен с помощью ADAL.js, а затем вызвать Microsoft Graph API на стороне сервера и вставить группы в токен? – Pickle

+1

Нет, это невозможно. Поскольку токен выдается/подписан с Azure AD. Мы не можем изменить токен для обеспечения безопасности. –

0

ОК я боролся с этим некоторое время, и я понял это, я верю.

Во-первых, В Azure AD настройте приложение WebApi как тип приложения, чтобы быть веб-приложением/API. перейти к манифесту файла и добавить свои роли как

[ 
    { 
     "allowedMemberTypes": [ 
     "User" 
     ], 
     "displayName": "Reviewer", 
     "id": "0238c2bb-9857-4d07-b760-a47ec621d57a", 
     "isEnabled": true, 
     "description": "Reviewer only have the ability to view tasks and their statuses.", 
     "value": "reviewer" 
    }, 
    { 
     "allowedMemberTypes": [ 
     "User" 
     ], 
     "displayName": "Approver", 
     "id": "000018cb-19e3-4f89-bf99-5d7acf30773b", 
     "isEnabled": true, 
     "description": "Approvers have the ability to change the status of tasks.", 
     "value": "approver" 
    } 
    ] 

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

В угловом приложение SPA добавить что-то вроде этого

var endPoints = { 
     // "https://localhost:44386/" is the API URL 
     // "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" is the Service Application ID 
     "https://localhost:44386/": "xxxxxxxxxxxxxxxxxxxxxxxxxx" 
    }; 
    adalAuthenticationServiceProvider.init({ 
     instance: "https://login.microsoftonline.com/", 
     // tenant is your tenant name (something like below) 
     tenant: "{NAME}.onmicrosoft.com", 
     // this is the Native app application ID (ClientID) you registered 
     clientId: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", 
     extraQueryParameter: "nux=1", 
     endpoints: endPoints 
    }, $httpProvider); 
} 

]);

Тогда в вашем startup.cs вам необходимо настроить службу App как следующее:

 app.UseWindowsAzureActiveDirectoryBearerAuthentication(
      new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
      { 
       TokenValidationParameters = new TokenValidationParameters 
       { 
       /* "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" is the Service Application ID. (Same as you registered in the client app above)*/ 
        ValidAudience = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
        RoleClaimType = "roles" 
       }, 
       /*enant is your tenant name (same as you registered in client app above)*/ 
       Tenant = "{NAME}.onmicrosoft.com" 
      }); 

Наконец, вам нужно перейти на Лазурный активное приложение Каталога => Enterprise => всех приложений => выберите ваша служба webAPI => Пользователи и группы => затем назначают пользователей ролям.

Когда все это делается при входе в систему через клиентское приложение для проверки подлинности и вызвать WebAPI, adal.js и ADA-angular.js поставит соответствующий маркер канала, которая содержит роли

0

Хорошо изучить этот подход ,

Ted, спасибо, что поделились своим решением!

Для тех, кто не знаком с файлом манифеста Azure AD. Ниже приведен хороший ресурс. https://thinkthencode.wordpress.com/2016/04/24/azure-ad-using-app-roles-for-authorization/

"appRoles": [ 
     { 
    "allowedMemberTypes": [ 
    "User" 
    ], 
    "displayName": "Reviewer", 
    "id": "0238c2bb-9857-4d07-b760-a47ec621d57a", 
    "isEnabled": true, 
    "description": "Reviewer only have the ability to view tasks and their statuses.", 
    "value": "reviewer" 
}, 
{ 
    "allowedMemberTypes": [ 
    "User" 
    ], 
    "displayName": "Approver", 
    "id": "000018cb-19e3-4f89-bf99-5d7acf30773b", 
    "isEnabled": true, 
    "description": "Approvers have the ability to change the status of tasks.", 
    "value": "approver" 
} 
    ]