Spring 启动,OAuth2 自定义授权服务器
Spring Boot, OAuth2 Custom Auth Server
我正尝试在空闲时间涉足全栈开发领域,我只是想问一些关于我目前对 OAuth2 的理解的一般性问题。我对这些东西很陌生,但我看了一些 Udemy 视频以获得 基本 理解。
无论如何...我正在从事的这个项目,我计划拥有一个自定义授权服务器、一个资源服务器和一个客户端(可能是一个 SPA)。此授权服务器将仅允许 授权代码(可能带有 PKCE 扩展名)授权类型。这引出了我的第一个一般性问题...
凭直觉,我假设 password 授予类型就足够了。随着我阅读的内容越来越多,看起来这种资助流程并不是可行的方法。据我了解,使用此流程需要客户端提供某种形式以便用户可以登录。这样做可以让客户端访问用户凭据,这在很大程度上违背了 OAuth2 的目的之一。但是,我不确定这是不是我正在开发的问题,因为我正在创建授权服务器。我知道通过使用此授权流程,我没有验证客户端。有人可以解释这可能是一个问题吗?我还有什么想念的吗?我读过的所有内容都阻止我使用此授权流程,这主要是我最终决定授权代码(w/PKCE)流程的原因。
所以...假设我采用此流程,我的客户端应该提供一个登录按钮。按下此登录按钮会将客户端重定向到一个网页,资源所有者可以在该网页上授权客户端并提供用户凭据。然后我的授权服务器将验证这些用户凭据。我计划将用户凭据存储在 VM 运行 身份验证服务器上的数据库中。我不打算允许用户注册帐户。相反,我将在这个数据库中为我的团队成员提供一个静态的帐户凭据列表。所以我想我只是要在创建数据库时插入这些帐户?如果是这样,我如何允许这些用户更改他们的密码?我想我在想,最初这些帐户将被分配一个电子邮件、用户名和随机密码,我可以与他们通信。但是,我希望用户可以选择将此随机密码更改为更熟悉的密码。我目前不知道如何使用 OAuth2 实现来做这样的事情。我是否只是在客户端提供一种在用户登录时更改密码的方法?如果是这样,这是否会破坏使用 OAuth2 的目的,因为现在我的客户会知道用户凭据?但是,如果我要这样做,这是否只是作为 POST 对身份验证服务器上的 REST API 更新密码的请求来实现?
我会首先使用免费的云提供商作为授权服务器。看看我的以下教程,它使用授权代码流+ PKCE:
此示例使用 AWS Cognito,这是一个快速入门的选项。它将使您能够创建用户 - 然后系统将提示他们在第一次登录时更改密码。
重点是:
- 在您的应用中编写简单的基于标准的代码并花时间学习推荐的流程和设计模式
- 编写代码后,如果需要,您应该可以稍后切换到不同的授权服务器
- 避免构建您自己的授权服务器,并使用专家提供的授权服务器
你应该只需要 Spring 作为资源服务器(我上面的 API 使用 Node.js)。如果您想要一个简单易懂的 Spring 资源服务器示例,请参阅 this one.
我正尝试在空闲时间涉足全栈开发领域,我只是想问一些关于我目前对 OAuth2 的理解的一般性问题。我对这些东西很陌生,但我看了一些 Udemy 视频以获得 基本 理解。
无论如何...我正在从事的这个项目,我计划拥有一个自定义授权服务器、一个资源服务器和一个客户端(可能是一个 SPA)。此授权服务器将仅允许 授权代码(可能带有 PKCE 扩展名)授权类型。这引出了我的第一个一般性问题...
凭直觉,我假设 password 授予类型就足够了。随着我阅读的内容越来越多,看起来这种资助流程并不是可行的方法。据我了解,使用此流程需要客户端提供某种形式以便用户可以登录。这样做可以让客户端访问用户凭据,这在很大程度上违背了 OAuth2 的目的之一。但是,我不确定这是不是我正在开发的问题,因为我正在创建授权服务器。我知道通过使用此授权流程,我没有验证客户端。有人可以解释这可能是一个问题吗?我还有什么想念的吗?我读过的所有内容都阻止我使用此授权流程,这主要是我最终决定授权代码(w/PKCE)流程的原因。
所以...假设我采用此流程,我的客户端应该提供一个登录按钮。按下此登录按钮会将客户端重定向到一个网页,资源所有者可以在该网页上授权客户端并提供用户凭据。然后我的授权服务器将验证这些用户凭据。我计划将用户凭据存储在 VM 运行 身份验证服务器上的数据库中。我不打算允许用户注册帐户。相反,我将在这个数据库中为我的团队成员提供一个静态的帐户凭据列表。所以我想我只是要在创建数据库时插入这些帐户?如果是这样,我如何允许这些用户更改他们的密码?我想我在想,最初这些帐户将被分配一个电子邮件、用户名和随机密码,我可以与他们通信。但是,我希望用户可以选择将此随机密码更改为更熟悉的密码。我目前不知道如何使用 OAuth2 实现来做这样的事情。我是否只是在客户端提供一种在用户登录时更改密码的方法?如果是这样,这是否会破坏使用 OAuth2 的目的,因为现在我的客户会知道用户凭据?但是,如果我要这样做,这是否只是作为 POST 对身份验证服务器上的 REST API 更新密码的请求来实现?
我会首先使用免费的云提供商作为授权服务器。看看我的以下教程,它使用授权代码流+ PKCE:
此示例使用 AWS Cognito,这是一个快速入门的选项。它将使您能够创建用户 - 然后系统将提示他们在第一次登录时更改密码。
重点是:
- 在您的应用中编写简单的基于标准的代码并花时间学习推荐的流程和设计模式
- 编写代码后,如果需要,您应该可以稍后切换到不同的授权服务器
- 避免构建您自己的授权服务器,并使用专家提供的授权服务器
你应该只需要 Spring 作为资源服务器(我上面的 API 使用 Node.js)。如果您想要一个简单易懂的 Spring 资源服务器示例,请参阅 this one.