【问题标题】:Spring Security 5 OAuth2 client password grant typeSpring Security 5 OAuth2 客户端密码授予类型
【发布时间】:2019-10-29 17:16:42
【问题描述】:

我有 2 个应用程序:

  1. Spring Application 1 是客户端和资源服务器。
  2. Spring Application 2 是授权服务器。

用户将能够登录应用程序 1 并访问其资源。 我想实现以下流程:

用户在登录表单中输入他的凭据 -> 应用程序 1 将使用用户凭据及其 clientId 和密码授权类型从应用程序 2 获取令牌 -> 使用令牌访问应用程序 1 的资源。

问题是 Spring Security 5 是否支持客户端的密码授予类型?我在 Spring Security 5 实现中找到了所有的休息授权类型,但没有找到密码。

【问题讨论】:

    标签: spring spring-boot spring-security oauth-2.0 spring-security-oauth2


    【解决方案1】:

    Spring Security 5.1.x 不支持,见Spring Security Reference

    6.6 OAuth 2.0 客户端

    OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。

    提供以下主要功能:

    • 授权码授予
    • 客户端凭据授予
    • WebClient Servlet 环境扩展(用于发出受保护的资源请求)

    HttpSecurity.oauth2Client() 提供了许多用于自定义 OAuth 2.0 客户端的配置选项。

    但是,您可以使用 Spring Security OAuth2,请参阅 OAuth 2 Developers Guide

    访问受保护的资源

    作为一般规则,Web 应用程序不应使用密码授权,因此如果您可以支持AuthorizationCodeResourceDetails,请避免使用ResourceOwnerPasswordResourceDetails。如果您迫切需要密码授权才能从 Java 客户端工作,请使用相同的机制来配置您的 OAuth2RestTemplate 并将凭据添加到 AccessTokenRequest (这是一个 Map 并且是短暂的)而不是 ResourceOwnerPasswordResourceDetails (在所有访问令牌)。

    或者您可以更新到 Spring Security 5.2.x,请参阅Spring Security Reference

    11.2 OAuth 2.0 客户端

    OAuth 2.0 客户端功能为 OAuth 2.0 授权框架中定义的客户端角色提供支持。

    概括地说,可用的核心功能有:

    授权补助支持

    • 授权码
    • 刷新令牌
    • 客户端凭据
    • 资源所有者密码凭据

    【讨论】:

    • Spring security 5.2 现在支持它
    • @JanZyka 谢谢。我将其添加到我的答案中。
    • 能否在此详细说明如何在最新版本的spring security中执行密码流程:stackoverflow.com/questions/59383562/…
    猜你喜欢
    • 2019-08-05
    • 2015-06-25
    • 2013-08-24
    • 2018-09-18
    • 2016-06-17
    • 2021-10-25
    • 2018-02-14
    • 2019-05-11
    • 2020-10-31
    相关资源
    最近更新 更多