Отдельный UserStore By Client - PullRequest
       12

Отдельный UserStore By Client

0 голосов
/ 21 апреля 2019

Я использую Identityserver4 и ASPIdentity для управления пользователями.Я хочу, чтобы пользователи не имели доступа ко всем приложениям (клиентам).Я собираюсь добавить таблицу как UserClients, которая определяет разрешенные приложения для пользователя.Мне интересны ваши советы, возможно ли это и не противоречит принципам единого входа?

1 Ответ

0 голосов
/ 22 апреля 2019

IdentityServer заботится о конфигурации клиентского доступа и аутентификации пользователя, но не об авторизации на уровне клиент / пользователь.

Пользователи не связаны с клиентом. Таким образом, как вы заметили, все пользователи имеют доступ к клиенту. IdentityServer проверяет подлинность пользователя независимо от того, какой клиент используется или входит ли пользователь в IdentityServer напрямую.

То есть клиент (а также API) должен авторизовать пользователя.

Неважно, аутентифицирован ли пользователь (SSO) или нет. Клиент / API отвечает за определение того, авторизован ли пользователь. Чтобы решить эту «проблему», они создали PolicyServer для разделения аутентификации и авторизации.

Добавляя промежуточное ПО (как это сделано в PolicyServer), вы можете предоставить или запретить пользователю доступ.

Вы можете добавить некоторый дискриминатор в IdentityServer, например конкретный тип заявки / роль, используйте отдельный сервер авторизации или используйте авторизацию на основе ресурсов, например, когда (бизнес) пользователь присутствует, то у него есть доступ.

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

Все, что вам нужно сделать, - это замкнуть трубопровод в случае, если у пользователя , прошедшего проверку подлинности *1017*, нет доступа. Отлично, если вы хотите «отключить» единый вход. Просто проигнорируйте файл cookie IdentityServer (в клиенте), что вынудит пользователя войти в систему (для этого клиента).

Но вы не должны отказывать в аутентификации (например, возвращать неверный логин), когда пользователь не имеет доступа к клиенту / ресурсу.

Именно поэтому существует http статус 401 Unauthorized и 403 Forbidden. Таким образом, вы можете уведомить пользователя, что он не авторизован для использования этого клиента.


Что касается вашей настройки, в вашем случае вы также можете добавить заявки в таблицу UserClaims (вместо создания дополнительной таблицы) для настройки разрешенных приложений, например, пользователь A:

http://mycompany/appname = app1
http://mycompany/appname = app2
http://mycompany/appname = app3

Добавьте ClaimType в таблицу IdentityClaims и таблицу ApiClaims, чтобы убедиться, что утверждения попадают в токен доступа / идентификации.

Добавьте промежуточное ПО в клиент / ресурс или добавьте бизнес-правила (политики), где вы проверяете тип заявки и требуемое значение. Если нет, то запретить доступ. Например. app1 должен искать требуемый тип заявки http://mycompany/appname со значением 'app1'.

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