Spring 安全 - 参数中没有 client_secret 的访问令牌

Spring Security - Access Token without client_secret in parameters

我有一个基于 spring 安全性 oauth2 的应用程序,配置了一个 JDBC 客户端存储。根据 OAuth2 规范,客户端机密只能在客户端-服务器连接值得信赖时使用,当然不能来自 Web 应用程序 - 可以从中提取客户端机密。

所以问题是 - 我们如何配置让授权类型为 "password" 的 /oauth/token 请求生成访问令牌,而 [=] 中没有 client_secret 密钥23=] 参数?

这是我的授权服务器配置。我会说非常基本。

<sec:http pattern="/token" create-session="stateless" use-expressions="true" authentication-manager-ref="authenticationManager">
        <sec:headers>
            <sec:frame-options policy="DENY" />
            <sec:hsts />
        </sec:headers>
        <sec:csrf disabled="true" />
        <sec:anonymous enabled="false" />
        <sec:http-basic entry-point-ref="clientAuthenticationEntryPoint" />
        <sec:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
        <sec:access-denied-handler ref="oauthAccessDeniedHandler" />
    </sec:http>

根据 OAuth2 规范 RFC6749,密码授予类型必须将客户端机密作为请求正文参数或 BASE64 编码字符串传入。密码授予类型不适合安全性较低或机密暴露于外界的风险较高的应用程序。

对于具有用户代理(网络浏览器)的应用程序,隐式授权类型是最好的方法。

Refer the OAuth2 Specs here