Если API является использованием ASP.NET вы можете использовать встроенный OpenID Connect функциональность и использовать регулярные [Authorize]
атрибуты на этих контроллерах API или методов, которые вы хотите защитить.
Существует comprehensive sample.
Образец использует обычную аутентификацию OpenID Connect и использует заявки на токены JWT для извлечения членства в группе пользователей. Если группы не могут содержаться в токере JWT, токен будет содержать ссылку на то, где вы можете их получить. Это обрабатывается в файле ClaimHelper.cs образца.
Чтобы получить групповые претензии в токене JWT, не забудьте следовать step 3 в процедурах установки образца, так как их по умолчанию нет.
Вы даже можете поместить идентификаторы объектов группы из AAD в «Роли» ASP.NET, поэтому вы можете использовать атрибут [Authorize]
, например [Authorize(Roles="217ea9e4-0350-4a2d-b805-d71317fa0245")]
, где GUID является идентификатором объекта группы, членство в котором требуется.
Для достижения последней части необходимо сначала добавить заявки группы к манифесту (шаг 3, указанный выше), а затем добавить TokenValidationParameters
в OpenIdConnectAuthenticationOptions
, где вы определяете, какой тип претензий будет определять роли (в Startup.Auth .cs):
new OpenIdConnectAuthenticationOptions
{
// add this:
TokenValidationParameters = new TokenValidationParameters()
{
RoleClaimType = "groups"
},
// end added code
ClientId = ConfigHelper.ClientId,
Последнее, вероятно, не лучшая практика, так как вам нужно ObjectId группы в атрибуте [Authorize]
.
Спасибо. Теперь я застрял там, где я упоминаю RoleCliamType = "group", не нашел код в StartUp.Auth.cs. –
Образец StartUp.Auth.cs не имеет RoleClaimType –
Я добавил свойство '' TokenValidationParameters'' в '' OpenIdConnectAuthenticationOptions'' в фрагменте, так что это более понятно. – RasmusW