具有Spring Boot后端的Android本机应用的oauth授予类型

时间:2019-03-27 16:16:34

标签: android spring-security oauth-2.0 spring-security-oauth2

我在具有REST端点的后端中有一个android native app作为客户端和spring boot服务。我想知道使用oAuth2进行身份验证的最佳可能策略(不使用社交登录方法)。

我当前正在使用spring oauth security并具有授权服务器并正在运行(用户使用电子邮件和密码注册)。我使用授权类型“密码”来获取android应用中的访问令牌。但是,此方法需要android应用发送请求中的客户端ID和密码。我读了一些posts,这表明此授予类型不是理想的。我不介意接收用户密码,但是我认为在应用程序中存储客户端密码不是一个好方法。

另一种方法是使用授权码授予流程,但是在这种情况下,由于我只有本机应用程序和后端API,因此我不知道如何授权用户。用户看到浏览器页面要求他们授权应用程序似乎不是一种无缝体验。这也没有意义,因为这不是第三方应用程序。

我发现了一个post,人们建议在PKCE中使用授权码流程。但这显然不适用于spring

因此,现在我不知道其他本地移动应用程序如何处理身份验证?他们不使用访问令牌吗?在处理移动应用和Spring后端时,我如何最好地支持身份验证?

1 个答案:

答案 0 :(得分:0)

Spring Security OAuth支持passwordauthorization_codewithout the client secret,这意味着“公共客户端”。由于您拥有授权服务器本地应用程序,并且可以使用本地应用程序的凭据,因此让您的本地应用程序与{{ 1}}授权类型。

但是,如果您确定本机应用程序不应该使用凭据,则PKCE是当前的最佳实践。推荐alternative to PKCE与公共客户一起使用password流:

  

自最初编写规范以来,行业最佳实践已更改为建议使用对本地应用程序没有秘密的授权代码流。

这就是您所说的jumping out to a browser