我已经阅读了几天的oauth2文档,它的确变得令人困惑。
我有一个配置为ouath2的spring-boot应用程序。我想编写一个Angular应用程序来访问那些APIS。 angular应用程序中有一个登录页面,用户必须输入用户名和密码才能登录(获取访问令牌)。将来,还将开发一个android和IOS来访问这些api。令人困惑的是,哪种授权类型将是这种方法中最好的?
我的发现是资源所有者密码最适合此类客户端,但是我应该在哪里将客户端凭据保存在角度应用程序中,因为将客户端凭据放在客户端应用程序中并不安全,而且我发现无法注册ouath2中没有客户端秘密的客户端。
*我想通过我的服务器对用户进行身份验证。
提前致谢
对您的主要问题的答案(如果oAuth是一种很好的方法)实际上并不适合SO,因为它可能太基于观点了。当然,这是一种方法。
但是,对于您提到的客户端机密问题,有一个解决方案。 正如您正确地说的那样,没有办法将安全的秘密存储在客户端中。 因此,开发了带有用于代码交换的证明密钥的授权代码流(或仅带有PKCE的代码流),以授权公共客户端,而无需在客户端中存储静态机密。
(source: Techworks Blog)
要提到的关键部分是,应用程序在运行时生成一个密码,并且仅使用此密码的哈希值来请求令牌。因此,客户端(浏览器,应用程序)不会捕获任何秘密。 反过来,授权服务器不会直接传递访问令牌,而只会传递请求访问令牌的代码。 仅当密码(由应用程序最初生成的密码)和来自授权服务器的代码一起发送到服务器时,才可以获取实际的访问令牌。 这使服务器可以确保请求来自最初希望进行身份验证的应用程序,因为服务器可以通过再次对接收到的秘密进行哈希处理来验证先前接收到的哈希值。
由于这个主题很大,因此我只能给您一些很好的提示,当我不得不处理这个主题时,这些提示对我有很大帮助: