2016-05-13 102 views
0

我有一个基于spring安全oauth2的应用程序,配置了一个JDBC客户端存储。根据OAuth2规范,客户机密只能在客户机 - 服务器连接值得信任时才使用,当然不能从Web应用程序 - 客户机机密可以从中提取。春季安全 - 访问令牌没有client_secret在参数

所以问题是 - 我们如何配置,让/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> 
+1

我猜你是混淆2条腿的流量(隐性补助流)意味着基于浏览器的客户端不涉及客户端密钥,但不是密码流。 – dvsakgec

回答

-1

根据RFC6749,所述的OAuth2规格,密码交付式必须在无论是作为一个请求身体参数或作为BASE64编码的字符串传递的客户端密钥。密码授权类型不适用于安全性较低或秘密暴露于外部世界的高风险应用程序。

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

Refer the OAuth2 Specs here