他のWebサービスで使用される安らかなWebサービスを作成しようとしています。理想的には、クライアントがサービスにアクセスし、認証されていない場合、401を取得する必要があります。ユーザーがリクエストに認証ヘッダーを追加して認証できるようにしたいです。ユーザーにログインフォームに記入して投稿してほしくない。また、ログイン資格情報をCookieに保存したくない(つまり、状態を保持したくない)場合は、すべてのリクエストで送信されるauthヘッダーに含める必要があります。私はSpringRooを使用してWebサービスを作成しました。
私が現在持っているもの(Spring Security 3.1チュートリアルの1つから取得)では、ユーザーが401を取得すると、ログインページが表示され、ページを投稿して、リクエストごとに送信するCookieを取得します。
これが私の春のセキュリティxmlです。
<http use-expressions="true">
<intercept-url pattern="/customers/**" access="isAuthenticated()" />
<intercept-url pattern="/**" access="denyAll" />
<form-login />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="alice" password="other" authorities="user" />
<user name="custome1" password="other" authorities="user" />
</user-service>
</authentication-provider>
</authentication-manager>
Curlからリクエストを送信すると、次のようになります。
$ curl -i -H "Accept: application/json" -H "Authorization: Basic Y3VzdG9tZXIxOm90aGVy" http://localhost:8080/Secured/customers
HTTP/1.1 302 Found
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=B4F983464F68199FA0160DBE6279F440; Path=/Secured/; HttpOnly
Location: http://localhost:8080/Secured/spring_security_login;jsessionid=B4F983464F68199FA0160DBE6279F440
Content-Length: 0
Date: Thu, 25 Apr 2013 17:18:48 GMT
ここで、私の基本的なヘッダートークンはbase64(customer1:other)です。
Webサービスにauthヘッダーを受け入れさせ、ログインページにリダイレクトしないようにするにはどうすればよいですか?
Security.xmlからを削除すると、次のようになります。
excpetion:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: No AuthenticationEntryPoint could be established.
Please make sure you have a login mechanism configured through the namespace
(such as form-login) or specify a custom AuthenticationEntryPoint with the
'entry-point-ref' attribute
<form-login>
を削除し、<http-basic>
を追加する必要がありました。また、私の設定にcreate-session- "stateless"を追加しました。
<http use-expressions="true" create-session="stateless" >
<intercept-url pattern="/customers/**" access="isAuthenticated()" />
<intercept-url pattern="/**" access="denyAll" />
<http-basic/>
</http>
これは、REST認証、フォーム、または基本的な必要なものを使用した非xml構成の例です。
.and().httpBasic();
魔法をします! ))
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/someurl").hasRole("ADMIN")
.antMatchers("/anotherurl").hasRole("USER")
.antMatchers("/", "main").permitAll().anyRequest().authenticated()
.and()
.httpBasic();
http.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
...
}
スプリングセキュリティを備えたjax-rsのこのテストデモに従ってください http://svn.Apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/jax_rs/spring_security/
これは、資格情報を宣伝せずに認証するための単純なアプローチです。
RequestHandler
を実装してオーバーライドすることもできます
public Response handleRequest(Message message, ClassResourceInfo resourceClass);
フォロー: http://cxf.Apache.org/docs/secure-jax-rs-services.html アプローチの完全なセットについては。