Spring 针对现有API的移动应用程序身份验证

Spring 针对现有API的移动应用程序身份验证,spring,mobile,spring-security,oauth-2.0,spring-security-oauth2,Spring,Mobile,Spring Security,Oauth 2.0,Spring Security Oauth2,我有Spring security的应用程序。这是Angular SPA的REST api。它使用会话和cookie机制。现在我想从移动应用程序(Nativescript)访问这个api。我花了一些时间寻找验证移动应用程序用户身份的最佳方法。在大多数情况下,建议使用oauth2和jwt令牌。所以我已经对此进行了研究,并决定只为移动应用程序添加额外的(单独的)身份验证。所以Angular应用程序仍将使用带有路径api/的会话。。。移动应用程序将使用带有path/api/mobile/…的令牌机制。

我有Spring security的应用程序。这是Angular SPA的REST api。它使用会话和cookie机制。现在我想从移动应用程序(Nativescript)访问这个api。我花了一些时间寻找验证移动应用程序用户身份的最佳方法。在大多数情况下,建议使用oauth2和jwt令牌。所以我已经对此进行了研究,并决定只为移动应用程序添加额外的(单独的)身份验证。所以Angular应用程序仍将使用带有路径api/的会话。。。移动应用程序将使用带有path/api/mobile/…的令牌机制。。。(下面是相同的api,但前缀不同)

我决定使用OAuth2及其Spring集成。我已经阅读了文档,我很困惑。为什么他们总是提到认证提供商(谷歌、Github、Facebook)?我不想强迫我的用户通过其他服务登录。我希望允许他们使用已在我的应用程序中注册的凭据登录。这种社交登录与oAuth授权服务器有何关联?他们提供的所有示例都使用其他一些服务

我还尝试在现有应用程序中添加授权服务器。我已成功检索令牌。但现在我不明白所有这些关系。有一个保存客户端id和客户端服务器的授权服务器。但为什么/auth/token端点需要另一个身份验证?因此,移动应用程序需要提供3种不同的凭据—用户凭据、客户端id以及机密和令牌端点凭据

我错过什么了吗?我知道OAuth是唯一的规范,Spring是它的实现。但我的印象是,春天把这件事复杂化了。既然我只有1种类型的资源,我还需要oauth吗

@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);
    }
}

授权服务器是OAuth2规范的一部分。规范中规定“授权服务器在资源所有者批准的情况下向第三方客户端颁发访问令牌。”。如果您不想使用访问令牌和授权服务器,那么您的应用程序中可能不需要OAuth2。我可以使用令牌和授权服务器。我不确定我是否了解授权服务器与身份验证提供商(Github、Facebook等)的关系。据我所知,这些提供者是可选的,我可以使用我的身份验证机制。另一方面,在SpringRepo的所有例子中,他们都使用谷歌或Facebook。因此,我正在寻找使用来自DB而不是第三方的凭据的令牌身份验证的工作示例。或者通过其他方式从移动应用程序对用户进行身份验证。