Проверка авторизации в прикладном приложении

Java

Проверка прав пользователей в Java-приложениях осуществляется с использованием Spring Security и JWT-фильтров.
Для выполнения проверки прав и предоставления групп пользователей используются JWT-фильтры plat-jwt-authentication-starter и plat-stumb-jwt-authentication-starter. Перед выполнением шагов ниже выполните подключение этих фильтров, см. раздел Подключение аутентификации в Java-приложениях.
  1. Добавьте URL для получения прав в application.yml.
    application.yml type=yml
    auth:
      authorizeUrl: http://platform-gateway/ufs-security
    
  2. Если у вас нет доступа к стендам или нет возможности получить 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"
          ]
         }
     }
    
  3. Для ограничения доступа к Endpoint с помощью прав доступа добавьте аннотацию PreAuthorize.
    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 {
    
        @GetMapping
        @PreAuthorize("hasAuthority('CustomPermissions.SMT.View')")
        public String hasPermission() {
    
            return "Has Permission";
        }
    }
    
  4. Для получения списка всех групп и прав пользователя используйте объект «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 токену
Предыдущий раздел
Назначение ролей для внутренних привилегированных польз...
Следующий раздел
API для авторизации в прикладных приложениях
Была ли страница полезной?