【问题标题】:Is OAuth a good approach for securing an API of Angular application?OAuth 是保护 Angular 应用程序 API 的好方法吗?
【发布时间】:2023-03-15 05:15:01
【问题描述】:

我已经浏览了几天的 OAuth2 文档,它真的变得令人困惑。

我有一个配置了 OAuth2 的 spring-boot 应用程序。我想编写一个 Angular 应用程序来访问这些 API。 Angular 应用程序中有一个登录页面。用户必须输入用户名和密码才能登录(以获取访问令牌)。稍后还将开发 Android 和 iOS 应用程序来访问这些 API。令人困惑的部分是哪种授权类型最适合这种方法?

我的发现是资源所有者密码最适合这种类型的客户端,但是我应该将客户端凭据保存在 Angular 应用程序的哪里,因为将客户端凭据放在客户端应用程序中并不安全,而且我发现它是如果没有客户端密码,则无法在 OAuth2 中注册客户端。

我想从我的服务器验证用户。

提前致谢

【问题讨论】:

    标签: angular spring-boot oauth-2.0


    【解决方案1】:

    您的主要问题的答案(如果 oAuth 是一种好方法)并不适合 SO,因为它可能过于基于意见。这肯定是一种方法。

    但是,对于您提到的客户端密码问题,有一个解决方案。 正如您所说的那样,没有办法将机密存储在安全的客户端中。
    因此开发了带有证明密钥的代码交换的授权代码流(或只是带有PKCE的代码流),以授权公共客户端,而无需在其中存储静态机密客户。


    (来源:Techworks Blog

    要提到的关键部分是,应用程序在运行时生成一个秘密,并且只使用这个秘密的哈希来请求一个令牌。因此,客户端(浏览器、应用程序)无法捕获任何秘密。 反过来,授权服务器不直接传递访问令牌,而只传递一个请求访问令牌的代码。
    仅当密钥(最初由应用程序生成)和来自授权服务器的代码一起发送到服务器时,才能获取实际的访问令牌。
    这允许服务器确保请求来自最初想要进行身份验证的应用程序,因为服务器可以通过再次散列接收到的秘密来验证先前接收到的散列。

    由于这个话题很大,我只能给你一些很好的提示,当我不得不处理这个话题时对我有很大帮助:

    【讨论】:

    • 您好乔伊,感谢您的帮助。我将通过链接让您知道,但我担心的是,会提示身份验证服务器返回的登录表单,而不是我希望在 Angular 客户端中使用现有的登录表单。
    • 这是对的。尽管大多数授权服务器都提供了自定义登录表单的可能性(当然,这不能解决重定向问题以及 SPA 状态的丢失 - 您可能必须自己处理),或者也取决于授权服务器,可能有一个 API。通过 API,可以使用您自己的登录表单并遵循代码流。但请记住,如果您使用 API,您可能必须在下一个可能开发的应用程序中再次实现此功能,而不是仅使用现有登录名(使用自定义设计)。
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 2018-01-13
    • 2015-08-12
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多