【问题标题】:Spring Security Digest Auth using JavaConfig ExampleSpring Security Digest Auth 使用 JavaConfig 示例
【发布时间】:2014-01-29 18:02:06
【问题描述】:

如何配置 Spring 4.0 和 Spring Security (3.2.0) 以专门使用 javaconfig(无 XML)进行摘要身份验证?我正在使用以下配置类,但是所有请求都被 HTTP 401 拒绝,并且“Nonce 应该已经产生了两个令牌,但是(...消息只是停在那里)”。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfigurationDigest extends WebSecurityConfigurerAdapter
{
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
{
    auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.authorizeRequests().antMatchers("/**").authenticated().and().addFilter(digestAuthenticationFilter(digestEntryPoint()));
}

@Override
@Bean
public UserDetailsService userDetailsServiceBean() throws Exception
{
    return super.userDetailsServiceBean();
}

public DigestAuthenticationFilter digestAuthenticationFilter(DigestAuthenticationEntryPoint digestAuthenticationEntryPoint) throws Exception
{
    DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter();
    digestAuthenticationFilter.setAuthenticationEntryPoint(digestEntryPoint());
    digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean());
    return digestAuthenticationFilter;
}

@Bean
public DigestAuthenticationEntryPoint digestEntryPoint()
{
    DigestAuthenticationEntryPoint digestAuthenticationEntryPoint = new DigestAuthenticationEntryPoint();
    digestAuthenticationEntryPoint.setKey("mykey");
    digestAuthenticationEntryPoint.setRealmName("myrealm");
    return digestAuthenticationEntryPoint;
}
}

我正在尝试通过包含标头在客户端进行授权:

授权:Digest username="user", realm="myrealm", nonce="", uri="/service?param=98", response="fcd46faf42a583499d4e7f0371171ef2", opaque=""

如果我将此类恢复为基于 HttpBasic 的配置,我就能够访问预期的服务。是我的配置有问题还是我的请求有问题?上面的大部分代码都是从另一篇文章中借来的,但是我无法在这种情况下工作。所有这些都在 Spring Boot 0.5.0M7 中运行。

谢谢。

【问题讨论】:

    标签: java spring spring-security digest-authentication spring-java-config


    【解决方案1】:

    请求似乎不完整。 noonce 参数应包含根据digest processing filter 参考的base64 编码值。

    摘要式身份验证的核心是“随机数”。这是服务器生成的值。 Spring Security 的 nonce 采用如下格式:

    base64(expirationTime + ":" + md5Hex(expirationTime + ":" + key))
    expirationTime:   The date and time when the nonce expires, expressed in milliseconds
    key:              A private key to prevent modification of the nonce token
    

    【讨论】:

      【解决方案2】:

      SpringPatrick 都描述了发出请求的流程,如果没有其他方法从服务器获取随机数,则服务器提供此标头

      "WWW-Authenticate: Digest realm="realm", nonce="IVjZjc3Yg==", qop="auth"

      在其 401 响应中对客户说“嘿,你是谁”。使用 nonce 和其他 stuff 创建 md5 哈希并将其发送到服务器。服务器现在很高兴并处理请求。看看你进入第 1 步的光明面,并检查链接以获得更好的解释

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-09
        • 2015-08-07
        • 2016-03-04
        • 2013-07-02
        • 2014-06-06
        • 2014-03-07
        • 2014-08-06
        • 2016-11-03
        相关资源
        最近更新 更多