【问题标题】:Spring Security - Access Token without client_secret in parametersSpring Security - 参数中没有client_secret的访问令牌
【发布时间】:2016-09-09 18:30:32
【问题描述】:

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

所以问题是 - 我们如何配置让授权类型为“密码”的 /oauth/token 请求生成访问令牌,而 POST 参数中没有 client_secret 键?

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

<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>

【问题讨论】:

  • 我猜你对用于基于浏览器的客户端的 2-legged 流(隐式授权流)感到困惑,它不涉及客户端机密但不是密码流。

标签: spring spring-security spring-security-oauth2 oauth2


【解决方案1】:

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

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

Refer the OAuth2 Specs here

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2023-02-03
    • 2015-12-29
    • 2015-03-30
    • 2020-04-09
    • 2018-12-01
    • 1970-01-01
    • 2015-10-14
    • 2018-06-27
    相关资源
    最近更新 更多