代码之家  ›  专栏  ›  技术社区  ›  code-geek

Spring Boot OAuth2基于角色的授权实现

  •  0
  • code-geek  · 技术社区  · 5 年前

    我被困在最初的实施阶段。我没有分享下面的任何代码,因为我不知道应该选择哪种方法来实现。

    我有以下要求:

    1. 给定一对 client_id 客户机对我的授权服务器端点保密(假设我从Postman点击了授权端点),它应该返回一个访问令牌来访问驻留在资源服务器中的API
    2. 此外,我还有一个基于Angular的web应用程序,它将使用组织凭据登录,并具有“管理员”、“用户”等特定角色,我需要根据这些角色限制web应用程序对API的访问

    在阅读了许多关于不同oauth授权类型的文章后,我开始明白,对于第一个需求,最好使用clinet_credentials授权类型,因为它不需要用户身份验证。 但我有Spring安全依赖项,默认情况下,它会检查并验证用户。在没有用户身份验证的情况下,我如何实现我的第一个需求?

    但是,在我的第二个需求中,员工数据库是由组织管理的。有了组织凭据,我需要进行身份验证,并且根据登录用户的角色,我必须执行角色管理,在Web用户界面中,我希望隐藏一些UI组件,并限制服务器中很少的API访问

    我应该采用什么样的实现方法,在这种情况下必须使用什么样的grant_类型?

    是否必须同时使用以下两个依赖项?他们是否以任何方式相互独立/依赖?

    <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和客户机机密以及客户机凭据授权类型。

    请分享任何有用的链接,将与我的设计或任何样本代码。

    提前谢谢!

    0 回复  |  直到 5 年前
        1
  •  1
  •   Community Mohan Dere    4 年前

    在这个问题上有很多问题需要解决。首先是 spring-security-oauth2 模块已被弃用,并且在spring security 5中支持通过OAuth2令牌保护spring启动应用程序。

    对于您的案例#1,您使用客户#凭证授权类型是正确的,我认为您完全理解这个流程。

    在您的例子#2中,Angular应用程序只是JavaScript代码,无法安全地存储客户机机密。所以最好使用 authorization_code 格兰特类型。此流程在中进行了描述 OAuth 2 spec 事情是这样的:

    • 您的Angular客户端向 /authorize client_id 还有 redirect_uri (通常是对Angular UI所在域的回调)。
    • 授权服务器将通过将浏览器重定向到“身份提供者”来验证用户身份,该提供者通常只会向用户显示一个请求用户/通行证的登录屏幕。您可以使用Facebook或谷歌等身份提供商,也可以按照OIDC或SAML等标准编写自己的代码。请向您的身份验证服务器咨询如何与各种身份提供商集成。
    • 一旦通过身份验证,身份验证服务器将发出一个时间敏感的、仅限1次使用的“代码”,该代码将被发送回原始服务器 重定向_uri 这是在第一步提交的。
    • 然后,Angular客户端通过调用 /token 端点与 客户id , 重定向_uri , grant_type=authorization_code code .
    • 身份验证服务器将验证请求详细信息,并将浏览器重定向回 重定向_uri 以及生成的访问令牌。

    一旦正确配置了身份验证服务器和身份提供程序,就可以通过spring security 5通过查看官方 spring-security documentation .

    推荐文章