私は、これまで実際に使用したことがない Spring Security を使用して、RESTful Web サービス (Spring MVC を使用して実装) に基本認証を追加することに取り組んでいます。今のところ、UserService
後でリポジトリベースのものを追加するつもりで、インメモリを使用しているだけです。
<security:http>
<security:http-basic />
<security:intercept-url pattern="/**" access="ROLE_ADMIN" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="admin"
authorities="ROLE_USER, ROLE_ADMIN" />
<security:user name="guest" password="guest"
authorities="ROLE_GUEST" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
これは問題なく動作します。つまり、次のリクエストを送信すると、目的のリソース (エンコードされた文字列は admin:admin) へのアクセスが許可されます。
GET /user/v1/Tyler HTTP/1.1
Authorization: Basic YWRtaW46YWRtaW4=
次のリクエストを送信すると、エラー 403 が返されます (エンコードされた文字列は guest:guest です)。
GET /user/v1/Tyler HTTP/1.1
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
ただし、提供されたユーザー名が含まれていないUserService
リクエストを送信すると、予想どおり (または少なくとも必要な場合) にエラー 403 が発生せず、代わりにユーザー名とパスワードの入力を求めるプロンプトが表示され続けます。例 (エンコードされた文字列は user:user です):
GET /user/v1/Tyler HTTP/1.1
Authorization: Basic dXNlcjp1c2Vy
認識されないユーザー資格情報が提供されたときにエラー 403 で応答するために必要な追加の構成はありますか? どうすればそれを行うことができますか?