在开始的最初阶段,我就停留在实现上。我下面没有分享任何代码,因为我对选择哪种实现方法感到困惑。
我有以下要求:
client_id
和client_secret对授予我的Authorization Server端点(考虑到我从Postman击中Authorization端点),它应该返回访问令牌以访问我驻留在Resource Server中的API 阅读了许多有关不同的oauth授予类型的文章后,我了解到对于第一个要求,最好使用clinet_credentials授予类型,因为它不需要用户身份验证。 但是我有Spring Security依赖关系,默认情况下会检查并验证用户身份。在没有用户身份验证的情况下如何实现我的第一个要求?
但是,在我的第二个要求中,雇员数据库由组织管理。使用组织凭据,我需要进行身份验证,并基于登录用户的角色,我必须执行角色管理,其中,Web用户界面我希望在服务器中隐藏少量UI组件并限制对API的访问
为此,我应该采用哪种实现方法?在这种情况下必须使用哪种grant_type?
是否必须同时使用以下两个依赖项?他们以任何方式彼此独立/相互依赖吗?
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
我问的原因是仅由于Spring Security,我被迫使用用户名和密码进行身份验证,而在我的第一个要求中,我只想提供具有客户机凭证授予类型的客户机ID和客户机机密。 / p>
请分享与我的设计或任何示例代码相关的所有有用链接。
谢谢!
答案 0 :(得分:1)
这个问题有很多要解说的地方。首先,spring-security-oauth2
模块已被弃用,并且在spring-security 5中支持通过OAuth2令牌保护spring-boot应用程序。
对于您的案例1,使用client_credentials授予类型是正确的,我认为您完全理解此流程。
对于您的情况#2,Angular应用程序只是JavaScript代码,并且不能安全地存储客户端密码。因此,最好使用authorization_code
授予类型。该流程在OAuth 2 spec中进行了描述,如下所示:
/authorize
端点。该请求包括client_id
和redirect_uri
(通常是托管Angular UI所在域的回调)。redirect_uri
。/token
,client_id
,redirect_uri
和{{1 }}。grant_type=authorization_code
。在正确配置了身份验证服务器和身份提供程序之后,您可以通过查看官方spring-security documentation来通过Spring Security 5保护资源服务器。