Проверка авторизации в прикладном приложении
Проверка прав пользователей в Java-приложениях осуществляется с использованием Spring Security и JWT-фильтров.
Для выполнения проверки прав и предоставления групп пользователей используются JWT-фильтры
plat-jwt-authentication-starter
и plat-stumb-jwt-authentication-starter
. Перед выполнением шагов ниже выполните подключение этих фильтров, см. раздел Подключение аутентификации в Java-приложениях.-
Добавьте URL для получения прав в
application.yml
.application.yml type=ymlauth: authorizeUrl: http://platform-gateway/ufs-security
-
Если у вас нет доступа к стендам или нет возможности получить JWT-токен, вы можете настроить авторизацию в mock-режиме. Режимы настраиваются фильтрами Spring. В mock-режиме библиотека будет получать данные о правах и ролях пользователей из файла
profile.json.
localauth: profilesDir: profiles defaultProfile: synt
Для локального запуска добавьте в профили секцииpermissions
иgroups
. Если эти секции не указаны, расчет прав и групп произойдет на основе данных пользователя. При настроенной авторизации используйте тенантEFS_KEY_AUTHORITIES
.profile.json type=json"tenants": { "EFS_KEY_AUTHORITIES": { "roles": ["admin"], "groups": [ { "id": "id", "name": "First Group" }, { "id": "SecondGroupId", "name": "Second Group" } ], "permissions": [ "CustomPermissions.SMT.View", "CustomPermissions.SMT.Edit" ] } }
-
Для ограничения доступа к Endpoint с помощью прав доступа добавьте аннотацию
PreAuthorize
.TestController.java type=javapackage ru.sbrf.ufs.platform.security.demo.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; @RestController @RequestMapping("/authorization") @ApiIgnore public class AuthorizationController { @GetMapping @PreAuthorize("hasAuthority('CustomPermissions.SMT.View')") public String hasPermission() { return "Has Permission"; } }
-
Для получения списка всех групп и прав пользователя используйте объект «Authentication».TestController.java type=java
package ru.sbrf.ufs.platform.security.demo.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; @RestController @RequestMapping("/authorization") @ApiIgnore public class AuthorizationController { public class AuthoritiesResult { public String[] groups; public String[] permissions; public AuthoritiesResult(String[] groups, String[] permissions) { this.groups = groups; this.permissions = permissions; } } @GetMapping public AuthoritiesResult authorities(Authentication authentication) { Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); return new AuthoritiesResult( authorities.stream() .filter(x -> x instanceof EfsGroup) .map(x -> ((EfsGroup) x).getGroupName()) .toArray(String[]::new), authorities.stream() .filter(x -> x instanceof EfsAuthority) .map(x -> x.getAuthority()) .toArray(String[]::new)); } }
Если вам требуется получать права и группы пользователей в приложениях на других языках программирования, или вы не можете использовать Spring Security, воспользуйтесь методом
/authorize
UFS Provider. В ответ на запрос с переданным JWT-токеном метод вернет права и группы пользователя. Подробнее см. в описании API и в разделе «Интеграционные шлюзы».В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
Авторизация
Авторизация в ЕСИА с использованием личной или предоставленной тестовой учётной записи
Проверка наличия прав
Проверка наличия у пользователя определённых прав по JWT токену