Каков хороший способ вернуть информацию о пользователе (например, роли) после входа в систему? - PullRequest
0 голосов
/ 09 июля 2019

Для проекта я создал сервер авторизации с весенней загрузкой и сервер ресурсов.Я реализовал поток паролей oauth2.Я также создаю угловое веб-приложение, которое будет использовать данные конечных точек сервера ресурсов.Сервер ресурсов проверяет токен с помощью сервера авторизации.

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

Я создал CustomTokenEnhancer, который может добавить дополнительную информацию к моему ответу на токен.

@Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        final Map<String, Object> additionalInfo = new HashMap<>();
        User user = (User) authentication.getPrincipal();
        additionalInfo.put("id", user.getId());
        additionalInfo.put("username", authentication.getName());
        additionalInfo.put("organization", user.getOrganization());
        additionalInfo.put("roles", user.getRoles());
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    }

Это пример ответа после запроса токена.

{
    "access_token": "233fda99-3ff7-4766-bfa3-3b211280c64f",
    "token_type": "bearer",
    "refresh_token": "286e7324-9b8a-46de-a0c7-45e21be552d4",
    "expires_in": 35999,
    "scope": "read write",
    "organization": "organization",
    "roles": [
        {
            "id": "1",
            "createdAt": null,
            "name": "ROLE_admin",
            "permissions": [
                {
                    "id": "1",
                    "createdAt": null,
                    "name": "create_profile"
                },
                {
                    "id": "2",
                    "createdAt": null,
                    "name": "read_profile"
                },
                {
                    "id": "3",
                    "createdAt": null,
                    "name": "update_profile"
                },
                {
                    "id": "4",
                    "createdAt": null,
                    "name": "delete_profile"
                }
            ]
        }
    ],
    "id": 1,
    "username": "test"
}

Безопасно ли хранить информацию, например, роль в localalstorage, и использовать ее для принятия решения, какие элементы скрыть / показать в моем веб-приложении?

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Вы должны решить авторизацию на вашем бэкэнде. Чтобы защитить логику внешнего интерфейса, вы можете использовать такие инструменты, как Jscrambler, которые вы можете использовать в angular-cli и процессе сборки. Jscrambler сильно затрудняет отладку кода.

0 голосов
/ 09 июля 2019

Это в основном зависит от того, что вы подразумеваете под «элементами».

С того момента, как ваша информация находится во внешнем интерфейсе, ваш пользователь имеет к ней доступ, поэтому он может изменять ее (независимо от того, храните ли вы ее в локальном хранилище или где-либо еще, не имеет значения).

Зная это, вы можете догадаться, что именно бэкэнд должен решать, к чему имеет доступ ваш пользователь.

Так что, если ваш веб-интерфейс читает ваше локальное хранилище, чтобы узнать, следует ли показывать кнопку «редактировать» для примера, не возникает никаких проблем, если пользователь заставит кнопку появиться в любом случае, ваш бэкэнд подтвердит, что он имеет право редактировать объект, но если вы хотите скрыть конфиденциальную информацию на основе этого критерия, это не очень хорошая идея, ваш бэкэнд никогда не должен был отправлять эту информацию для начала.

...