Аутентификация мобильного приложения для существующего API - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть приложение с безопасностью Spring. Это REST API для Angular SPA. Он использует механизм сессии и cookie. Теперь я хочу получить доступ к этому API из мобильного приложения (Nativescript). Я потратил некоторое время на поиск лучшего способа аутентификации пользователя мобильного приложения. В большинстве случаев рекомендуются токены oauth2 и jwt. Поэтому я провел исследование по этому вопросу и решил добавить дополнительную (отдельную) аутентификацию только для мобильного приложения. Так что приложение Angular по-прежнему будет использовать сеанс с путем api / ..., а мобильное приложение будет использовать механизм токенов с путем / api / mobile / ... (под ним будет тот же API, но с другим префиксом).

Я решил использовать OAuth2 и его интеграцию с Spring. Я прочитал документацию, и я в замешательстве. Почему они всегда упоминают о провайдере аутентификации (Google, Github, Facebook)? Я не хочу заставлять своих пользователей входить через другой сервис. Я хочу разрешить им войти с учетными данными, которые они уже зарегистрировали в моем приложении. Как этот социальный логин вообще связан с сервером авторизации oAuth? Все предоставленные ими примеры используют некоторые другие сервисы.

Я также пытался добавить свой сервер авторизации в мое существующее приложение. Я успешно получил токен. Но сейчас я не понимаю всех этих отношений. Существует сервер авторизации, который хранит идентификатор клиента и сервер клиента. Но почему конечной точке / auth / token требуется другая аутентификация? Таким образом, мобильное приложение должно предоставлять 3 различных учетных данных - учетные данные пользователя, идентификатор клиента и секретные данные и учетные данные конечной точки токена.

Я что-то пропустил? Я знаю, что OAuth - это только спецификация, а Spring - ее реализация. Но у меня сложилось впечатление, что Spring это усложняет. И вообще нужен ли мне oauth, так как у меня есть только 1 тип ресурса?

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(ClientDetailsServiceConfigurer configurer) throws Exception {
        configurer
                .inMemory()
                .withClient(clientId)
                .secret(passwordEncoder.encode(clientSecret))
                .authorizedGrantTypes("refresh_token", "authorization_code", "password", "implicit")
                .scopes(scopeRead, scopeWrite)
                .resourceIds(resourceIds);
    }
}
...