Asp. Net Ядро не получает токен - PullRequest
0 голосов
/ 21 июня 2020

Я реализовал поставщика удостоверений, использующий indentiyserver4 для аутентификации моего API. Мне было интересно, может ли IDP аутентифицировать сам . в настоящее время, когда я отправляю access_token своему IDP, я не получаю никаких претензий. Я хотел бы добавить аутентификацию, чтобы только администраторы могли управлять пользователями.

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

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

Если вы хотите расширить IDP с помощью конечных точек Api, например, для функций, подобных администратору, которые должны быть доступны для клиентов, тогда вы можете настроить это, как любой другой api. Если клиенту разрешено запрашивать область, тогда утверждения будут частью токена доступа, и, будучи аудиторией, IDP увидит утверждения.

Но для Views / Pages в IDP вы можете просто использовать печенье. При входе в систему вы можете добавить эти утверждения в local cook ie.

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

Предположим, что пользователь является частью «группы администраторов», тогда вы можете добавить эту роль при входе в кухню ie.

await HttpContext.SignInAsync(user.Id, user.UserName, new Claim("role", "Admin"));

С помощью атрибута авторизации вы можете ограничить доступ к контроллеру в IDP. Вы можете настроить политику:

services
    .AddAuthorization(options =>
    {
        options.AddPolicy("AdminRole", p => p.RequireRole("Admin"));
    });

и ограничить доступ на уровне контроллера:

[Authorization("AdminRole")]

Используйте схемы, чтобы указать, использует ли авторизация токен-носитель.

[Authorization("AdminRole", AuthenticationSchemes = "Bearer")]
0 голосов
/ 21 июня 2020

То, что вы ищете, это Authorization на IdentityServer. Чтобы при этом не было необходимости передавать access_token в IDS4, просто добавьте атрибут [Authorize] для контроллера / действия, которое необходимо авторизовать. Хороший пример: ConsentController в быстром запуске

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...